根据C++参考,您可以通过以下方式新建一个对象:
MyClass * p1 = new MyClass;
Run Code Online (Sandbox Code Playgroud)
或者
MyClass * p2 = new (std::nothrow) MyClass;
Run Code Online (Sandbox Code Playgroud)
第二个将返回空指针而不是抛出异常.
但是,根据我的经验,我几乎看不到这个版本.
例如,谷歌不建议在他们的代码中使用异常,但我们可以看到他们没有在Chromium中使用nothrow版本.
是否有任何理由我们更喜欢默认的一个而不是一个?即使在没有使用异常的项目中?
- 编辑 -
跟进问题:我应该检查返回值malloc()吗?
看起来,相反,许多人建议检查malloc的返回值,有些人说是因为:
许多分配失败与内存不足无关.碎片可能导致分配失败,因为即使有足够的可用内存,也没有足够的连续空间可用.
这是真的?为什么我们在这种情况下对待malloc()和new()不同?