C++,new vs malloc 返回值

5 c++ malloc new-operator

当我学习C99 时,我被告知要始终检查的返回值malloc来检查它是成功还是失败,但是现在我开始学习C++并且我被告知不需要使用关键字来执行此操作new,您可以假设它将永远为你工作。

但这是为什么呢?

编辑:我收到了一些答案,并被告知要使用tryand catch,但是在C# 中使用 try 和 catch 过于频繁以捕获错误会使您的程序变慢并影响性能,C++是否如此?

uvu*_*vuv 4

new仍然可能失败并引发std::bad_alloc异常,并且您的程序需要检查它是否失败,或者只是让异常向上传播。您还可以传递一个标志,new使其表现得像mallocNULL在出现错误时返回。查看文档


编辑 这里有两个例子:

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

或者使用该nothrow标志,使其new行为如下malloc

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

  • “你的程序需要检查它是否这样做了。” - 它不需要检查。异常可以继续向上传播。这就是例外的全部思想。 (2认同)