C++之nothrow

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。

相关推荐
女王大人万岁11 分钟前
Golang标准库 CGO 介绍与使用指南
服务器·开发语言·后端·golang
myzzb13 分钟前
纯python 最快png转换RGB截图方案 ——deepseek
开发语言·python·学习·开源·开发
t1987512814 分钟前
基于Chirp分解和多相快速算法的离散分数傅里叶变换(DFRFT)MATLAB实现
开发语言·算法·matlab
jllllyuz15 分钟前
基于MATLAB的PAM通信系统仿真实现
开发语言·matlab
qq_4480111624 分钟前
python中的内置globals()详解
开发语言·python
愚者游世33 分钟前
力扣解决二进制 | 题型常用知识点梳理
c++·程序人生·算法·leetcode·职场和发展
悠哉清闲35 分钟前
Future
java·开发语言·kotlin
蜡笔小马1 小时前
15.Boost.Geometry 坐标系统详解
c++·boost
deepxuan1 小时前
Day2--python三大库-numpy
开发语言·python·numpy
AD钙奶-lalala1 小时前
Android编译C++代码步骤详解
android·开发语言·c++