当我学习C99 时,我被告知要始终检查的返回值malloc来检查它是成功还是失败,但是现在我开始学习C++并且我被告知不需要使用关键字来执行此操作new,您可以假设它将永远为你工作。
但这是为什么呢?
编辑:我收到了一些答案,并被告知要使用tryand catch,但是在C# 中使用 try 和 catch 过于频繁以捕获错误会使您的程序变慢并影响性能,C++是否如此?
new仍然可能失败并引发std::bad_alloc异常,并且您的程序需要检查它是否失败,或者只是让异常向上传播。您还可以传递一个标志,new使其表现得像malloc并NULL在出现错误时返回。查看文档。
编辑 这里有两个例子:
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)