nothrow
是 C++ 中的一个关键字,用于改变new
操作符的行为,使其在内存分配失败时不抛出异常,而是安静地返回一个空指针(nullptr
)。这对于那些不希望或不能处理异常的代码片段特别有用。要使用nothrow
,你需要包含<
new>
头文件,并在new
表达式中传入std::nothrow
1、使用new分配异常空间
如下图,它分配内存异常时,应用程序直接崩溃
2、使用new分配异常空间, **nothrow
**处理异常
未崩溃,异常后**
nothrow将其设为nullptr,此时10行输出日志便于定位问题
**
3、使用new分配异常空间, **try cach
**处理异常
try catch也可以捕获异常,避免程序完全崩溃
4、使用malloc分配空间,free释放
使用c标准的方式,malloc/free属于库函数,malloc在申请内存空间失败以后会返回一个nullptr指针,即使失败程序也不会崩溃
new如果分配失败了会抛出bad_alloc的异常,而malloc失败了会返回NULL。因此对于 new,可以采用try...catch语法但要适当捕获异常而且仅捕获有必要的代码段,也可以采用new(nothrow)的方法禁止抛出异常而返回NULL。