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。

相关推荐
咕噜咕噜啦啦9 分钟前
Java期末习题速通
java·开发语言
BHXDML24 分钟前
第七章:类与对象(c++)
开发语言·c++
梦梦代码精1 小时前
BuildingAI vs Dify vs 扣子:三大开源智能体平台架构风格对比
开发语言·前端·数据库·后端·架构·开源·推荐算法
yyf198905251 小时前
C++ 跨平台开发的挑战与应对策略
c++
又见野草2 小时前
C++类和对象(中)
开发语言·c++
kgduu2 小时前
js之表单
开发语言·前端·javascript
钊兵2 小时前
java实现GeoJSON地理信息对经纬度点的匹配
java·开发语言
毕设源码-钟学长2 小时前
【开题答辩全过程】以 基于Python的健康食谱规划系统的设计与实现为例,包含答辩的问题和答案
开发语言·python
秋刀鱼程序编程2 小时前
Java基础入门(五)----面向对象(上)
java·开发语言
Remember_9932 小时前
【LeetCode精选算法】滑动窗口专题二
java·开发语言·数据结构·算法·leetcode