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。

相关推荐
a程序小傲8 分钟前
得物Java面试被问:流批一体架构的实现和状态管理
java·开发语言·数据库·redis·缓存·面试·架构
xb11328 分钟前
C#异步编程入门概念及核心概念
开发语言·c#
黎雁·泠崖12 分钟前
Java继承:成员变量访问(就近原则+this/super用法)
java·开发语言
ShineWinsu26 分钟前
对于C++:模版初阶的解析
开发语言·c++·面试·笔试·函数··模版
Max_uuc31 分钟前
【C++ 硬核】告别 Excel 生成数组:利用 constexpr 实现编译期计算查找表 (LUT)
开发语言·c++·excel
m0_7482486538 分钟前
C++正则表达式攻略:从基础到高级应用
java·c++·正则表达式
墨雨晨曦8838 分钟前
leedcode刷题总结
java·开发语言
嫂子开门我是_我哥42 分钟前
第十六节:异常处理:让程序在报错中稳定运行
开发语言·python
退休钓鱼选手1 小时前
[CommonAPI + vsomeip]通信 原理 1
c++·自动驾驶
a努力。1 小时前
中国邮政Java面试被问:MySQL的ICP(索引条件下推)优化原理
java·开发语言·数据仓库·面试·职场和发展·重构·maven