我已经编程了很长时间,我看到的程序,当它们内存不足时,会尝试清理并退出,即优雅地失败.我不记得上次我看到一个人真正尝试恢复并继续正常运行.
如此多的处理依赖于能够成功分配内存,特别是在垃圾收集语言中,似乎内存不足错误应归类为不可恢复.(不可恢复的错误包括堆栈溢出等.)
使其成为可恢复错误的令人信服的理由是什么?
language-agnostic memory memory-management exception error-recovery
new操作员可以在现实生活中抛出异常吗?
如果是这样,除了杀死我的应用程序之外,我是否有任何处理此类异常的选项?
更新:
任何真实的,重要的new应用程序检查失败并在没有内存时恢复吗?
我很擅长C/C++中的异常处理 - 我知道所有关于从std :: exception创建自定义类,何时抛出,什么时候回到UNIX errno之类的简单事情等等.我确实有一件事我'当谈到访问COTS代码时,总是有点模糊.
如果我从COTS库中调用函数,如下所示:
void DoSomething()
{
try
{
CallCotsFunction();
}
catch (CotsException& ce)
{
//Cots error caught
}
catch (...)
{
//Unknown error caught.
}
}
Run Code Online (Sandbox Code Playgroud)
如果CallCotsFunction()异常处理不好或没有异常处理并执行除零或其他什么,它会传播到我的异常处理程序吗?
如果CallCotsFunction()导致sig-11或某种类型的东西会被抓住,或者所有赌注都是严重的?