我是一名学生,我对 C++ 知之甚少,我试图扩展这些知识。这更像是一个哲学问题..我不是要实施什么。
自从
#include <new>
//...
T * t = new (std::nothrow) T();
if(t)
{
//...
}
//...
将隐藏异常,并且由于处理异常比简单的更重if(t)
,new T()
考虑到我们将不得不使用try-catch()
检查简单分配是否成功(如果我们不成功,只是看着程序死)??
new
与使用 a 相比,正常分配有什么好处(如果有的话)nothrow new
?在这种情况下异常的开销是微不足道的吗?
此外,假设分配失败(例如,系统中不存在内存)。在那种情况下程序有什么可以做的,或者只是优雅地失败。没有办法在堆上找到空闲内存,当所有的都被保留时,有吗?
万一分配失败,并且 anstd::bad_alloc
为throw
n,我们如何假设由于没有足够的内存来分配对象(例如 a new int
),所以会有足够的内存来存储异常?
谢谢你的时间。我希望这个问题符合规则。