我在开发中经常使用Qt并喜欢它。Qt对象的通常设计模式是使用new
进行分配。
几乎所有的例子(尤其是由Qt设计器生成的代码)都没有对std::bad_alloc
异常进行检查。由于已分配的对象(通常是小部件等)很小,因此这几乎从不是问题。毕竟,如果您无法分配大约20个字节之类的东西,则几乎没有什么方法可以解决该问题。
目前,我采取了一个策略,即在try/catch中包装“大”(大小超过一页或两页)的分配。如果失败,则向用户显示消息。对于较小的分配,我将允许应用程序崩溃并出现std::bad_alloc
异常。
所以,我想知道这种情况下的思路是什么?
每次new
操作都进行检查好吗?还是只有我预计可能会失败的操作需要检查?
此外,在处理资源更受限制的嵌入式环境时,情况显然完全不同。我在桌面应用程序的上下文中提问,但也会感兴趣其他场景的答案。
int flag = false; try { vector<int> v(1000); flag = true; doEventLoop(); } catch(bad_alloc) { if (flag) cout << "我有4k可用来提示用户\n"; }
的技巧来确保某些东西被释放。 - Steve Jessop