【发布时间】:2010-12-21 02:05:55
【问题描述】:
我想知道,处理内存不足错误有哪些好的做法。
void SomeTask()
{
try
{
SomeObj obj = new SomeObj();
}
catch( std::bad_alloc& )
{
// What should be done here?
}
// ... more code ...
}
我觉得静默返回是错误的,因为程序可能在不确定的状态下运行。那么,这里应该发生什么,我应该让程序崩溃,还是有更好的选择?该程序作为服务运行,所以我不能只弹出错误消息。我想如果有足够的内存来做这件事,可能会记录一些东西。但是,我只是想知道,在这种情况下,您认为我应该怎么做?
谢谢。
【问题讨论】:
-
首先,不要测试null。抓住
std::bad_alloc。 -
其次,除非你能修复它,否则不要捕获 bad_alloc。这很少靠近分配点。如果这是由主事件循环启动的某种服务,则允许服务退出并一直回到事件循环。如果这是正常应用程序流程的一部分,那么通常的结果就是让抛出导致应用程序终止。在 main() 中捕获并记录所有异常,然后重新抛出异常。