C++,新VS Malloc返回值

2022-06-11 00:00:00 malloc c++ new-operator

当我学习C99时,我被告知要始终检查malloc的返回值,以查看它是成功还是失败,但现在我开始学习C++,他们告诉我new不需要这样做,您可以假设它对您总是有效的。

但为什么会这样?


解决方案

new仍然可能失败并引发std::bad_alloc异常,您的程序需要可能会检查它是否这样做了,或者只是让异常向上传播。您还可以向new传递一个标志,使其行为类似于malloc,并在出错时返回NULL。查看documentation。


编辑 这里有两个例子:

try {
  char* arr = new char[20];
} catch (std::bad_alloc& e) {
  // Handle error
}

或使用nothrow标志,使new行为类似malloc

char* arr = new (std::nothrow) char[20];
if (!arr) {
  // Handle error
}

相关文章