2011-09-17 43 views
2

我刚学过,如果内存分配不成功,您可能会抛出或处理异常。但在这里,我还没有看到很多人在使用newoperator时处理异常。分配内存时出现异常

例如:下列程序中的任何一点可能不会失败吗?

char* c = new char[1000]; 
delete []c; 

你应该如何处理异常?

回答

2

大多数人没有明确处理bad_alloc异常的原因是因为大多数时候,大多数用户应用程序可以从低内存条件恢复,因此让异常向外传播是最明智的事情去做。如果您可以执行明智的恢复操作,则只应明确地捕获异常。

在某些情况下,捕获std::bad_alloc异常是有意义的,例如,如果在分配大块内存失败时程序可以尝试另一种方法。这仅适用于某些系统;在过度使用内存的系统中,推测性地分配大块内存并期望std::bad_alloc将失败。

明确地捕获bad_alloc以便清理通常表示资源未被适当的RAII风格类实例管理,该风格类应该在析构函数中进行正确的清理,以确保它在每次作用域时都会发生无论是通过任何例外还是以其他方式。

3

抛出异常std::bad_alloc你应该使用,的try-catch块捕获它:

try 
{ 
    char* c = new char[1000]; 
} 
catch(std::bad_alloc &except) 
{ 

} 

的基本方针我遵循的例外是:
处理异常时您可以并且如果您可以从异常中恢复,请采取必要的措施从中恢复,如果您不能,则只需通过记录适当的诊断来终止应用程序/程序。

在内存分配失败的情况下,应用程序/程序通常不能继续或恢复。因此,通过记录某些诊断消息退出或通过允许异常向上传播来使其崩溃。