当前位置:  开发笔记 > 编程语言 > 正文

测试C++中"new"的返回是否有用?

如何解决《测试C++中"new"的返回是否有用?》经验,为你挑选了2个好方法。

我通常从未在C++中看到新测试,我想知道为什么.

Foo *f = new Foo;

// f is assumed as allocated, why usually, nobody test the return of new?



1> David Holm..:

根据当前标准,new永远不会返回NULL,而是抛出std :: bad_alloc.如果您不希望new抛出(按照旧标准)而是返回NULL,则应通过使用" (std :: nothrow) " 对其进行后缀来调用它.即

Foo* foo = new (std::nothrow) Foo;

当然,如果您有一个非常旧或可能已损坏的工具链,它可能不符合标准.


MSVC <= 2003是一个破碎的工具链
尽管如此,解决问题并没有什么坏处!

2> João Augusto..:

这一切都取决于您的编译器VC++版本6如果新的运算符失败,在非MFC应用程序上给出NULL.

当你使用例如带有VC++ 6的STL时问题变得更大,因为STL符合标准,当他需要获得一些内存时它永远不会测试NULL,并猜测在低内存条件下会发生什么......

因此,对于仍然使用VC++ 6和STL的每个人,请查看本文以获取修复. 不要让内存分配失败会破坏您的传统STL应用程序

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有