在我的一个学校项目中,我被要求创建一个不使用 STL
的程序在程序中,我用了很多
Pointer* = new Something;
if (Pointer == NULL) throw AllocationError();
我的问题是关于分配错误:
- 当分配失败时,
new
是否会抛出自动异常? - 如果是这样,如果我不使用 STL (
#include "exception.h"
) 如何捕获它? NULL
测试是否足够?
谢谢。
我在 Windows 7 上使用 eclipseCDT(C++) 和 MinGW>。
最佳答案
是的,如果无法分配内存,new 运算符会自动抛出异常。
除非您的编译器以某种方式禁用它,否则 new 运算符永远不会返回 NULL 指针。
它抛出一个 bad_alloc
异常。
还有一个 nothrow
版本的 new 可以使用:
int *p = new(nothrow) int(3);
如果无法分配内存,此版本将返回一个空指针。但还要注意,这并不能保证 100% nothrow
,因为对象的构造函数仍然可以抛出异常。
更多信息:http://msdn.microsoft.com/en-us/library/stxdwfae(VS.71).aspx
关于c++ - C++ 中的错误分配异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4615021/