首页 > 解决方案 > 每当动态分配内存时,您总是必须检查 bad_alloc 吗?

问题描述

如果 new 找不到足够的内存,则会引发异常。我绝对总是需要检查吗?我从来没有这样做过,也没有任何问题,但现在我读到你应该这样做。还是仅在某些情况下?

try
{
    pPos = new Vector2D(5,1);
}
catch(bad_alloc)
{
    // NO MEMORY!
}

标签: c++exception-handlingbad-alloc

解决方案


没有什么特别之处bad_alloc,你可以像捕捉任何其他异常一样捕捉或不捕捉它。抓住它是不寻常的。如果您有某种方法可以从内存不足的情况中恢复,您只会这样做。但我认为旨在处理内存不足错误的程序更常用的是以下nothrow版本new

pPos = new (std::nothrow) Vector2D(5,1);
if (!pPos) {
    // NO MEMORY!
}

推荐阅读