我通常从未在C++中看到新测试,我想知道为什么.
Foo *f = new Foo;
// f is assumed as allocated, why usually, nobody test the return of new?
根据当前标准,new永远不会返回NULL,而是抛出std :: bad_alloc.如果您不希望new抛出(按照旧标准)而是返回NULL,则应通过使用" (std :: nothrow) " 对其进行后缀来调用它.即
Foo* foo = new (std::nothrow) Foo;
当然,如果您有一个非常旧或可能已损坏的工具链,它可能不符合标准.
这一切都取决于您的编译器VC++版本6如果新的运算符失败,在非MFC应用程序上给出NULL.
当你使用例如带有VC++ 6的STL时问题变得更大,因为STL符合标准,当他需要获得一些内存时它永远不会测试NULL,并猜测在低内存条件下会发生什么......
因此,对于仍然使用VC++ 6和STL的每个人,请查看本文以获取修复. 不要让内存分配失败会破坏您的传统STL应用程序