c++ - C++ 中的错误分配异常

标签 c++ exception mingw new-operator allocation

在我的一个学校项目中,我被要求创建一个不使用 STL

的程序

在程序中,我用了很多

Pointer* = new Something;
if (Pointer == NULL) throw AllocationError();

我的问题是关于分配错误:

  1. 当分配失败时,new 是否会抛出自动异常
  2. 如果是这样,如果我不使用 STL (#include "exception.h") 如何捕获它?
  3. 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/

相关文章:

c++ - `substr` 是否使用相同的底层内存?

c++ - 为什么在 C++ 中不经常使用异常?

c++ - 在生产中使用 GCC 的 C++0x 模式?

c++ - Qt C++、Eclipse(在 Win 7 上)- 项目构建失败,出现 "unresolved reference to _Unwind_Resume"错误

c++ - 在两个 QTableView 之间拖放

c++ - 是 std :vector<char[30]> valid, 还是如何实现的? (固定大小数组的 vector ?)

c++ - "syntax error : missing ' ; ' before ' { '"in c++ project with precompiled header

java - freemarkers 跳过 assertNotNull InvalidReferenceException

java - 未捕获的翻译错误 : com. android.dx.cf.code.SimException

c++ - 找不到过程入口点__gxx_personality_v0