我今天刚开始阅读Effective C++并且到了作者谈论operator new的地步.
这本书很好地解释了如何捕获(具有不同程度的优雅)std :: bad_alloc异常,如果内存不足,操作员可以引发该异常.
我的问题是:当没有足够的内存来实例化一个对象时,你经常检查一下这个案例,如果有的话?为什么?麻烦值得吗?
当我能回答这个问题时,我会抓住异常:
一旦你发现了异常,你会怎么做?
大多数时候,我的回答是,"我不知道.也许我的来电者知道." 所以我没有抓住异常.让它冒泡到一个知道更好的人.
当你发现异常并让你的功能继续运行时,你已经对你的程序说:"没关系.这里的一切都很好." 当你这么说时,一切都会好起来的.所以,如果你的内存耗尽,那么在你处理之后std::bad_alloc
,你就不应该再没有内存了.您不应该只从函数返回错误代码,因为调用者必须明确检查该错误代码,并且您仍然内存不足.您对该异常的处理应该释放一些内存.清空一些缓存,将一些东西提交到磁盘等等.但是你的程序中有多少函数确实要负责减少程序的内存使用量?
如果无法解决触发异常的问题,则不要处理异常.
问题是,当内存不足时,除了写入崩溃转储并退出程序之外,通常没什么可做的.因此,检查程序中的每个新内容都是没用的.
一个例外是当您为例如加载文件分配内存时,在这种情况下,您只需要通知用户没有足够的内存可用于请求的操作.