我已经编程了很长时间,我看到的程序,当它们内存不足时,会尝试清理并退出,即优雅地失败.我不记得上次我看到一个人真正尝试恢复并继续正常运行.
如此多的处理依赖于能够成功分配内存,特别是在垃圾收集语言中,似乎内存不足错误应归类为不可恢复.(不可恢复的错误包括堆栈溢出等.)
使其成为可恢复错误的令人信服的理由是什么?
language-agnostic memory memory-management exception error-recovery
我是一名学生,我对C++知之甚少,我试图扩展它.这更像是一个哲学问题.我不是想要实现某些东西.
以来
#include <new>
//...
T * t = new (std::nothrow) T();
if(t)
{
//...
}
//...
Run Code Online (Sandbox Code Playgroud)
将隐藏异常,并且因为与简单相比处理异常更重if(t),为什么不正常new T()不被认为是不太好的做法,考虑到我们将不得不try-catch()用来检查简单分配是否成功(如果我们不成功,只是看程序死了)?
new与使用nothrow new?相比,正常分配有哪些好处(如果有的话)?在这种情况下,例外的开销是微不足道的?
此外,假设分配失败(例如,系统中不存在内存).程序在那种情况下可以做什么,或者只是优雅地失败.当保留所有内存时,无法在堆上找到空闲内存吗?
如果分配失败,并且a std::bad_alloc为thrown,我们如何假设由于没有足够的内存来分配对象(例如a new int),将有足够的内存来存储异常?
谢谢你的时间.我希望这个问题符合规则.