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。

相关推荐
卓越软件开发19 小时前
毕设全栈开发一条龙:Java/SpringBoot/Vue/ 小程序 / Python / 安卓 / AI 图像识别 人脸检测 车牌识别 YOLO
开发语言·spring boot·python·yolo·小程序·毕业设计·课程设计
一叶之秋141220 小时前
千面之法: 释放 C++ 多态的灵活威力
开发语言·c++
柒.梧.20 小时前
Java拷贝精讲:彻底分清浅拷贝与深拷贝
java·开发语言·python
一晌小贪欢20 小时前
PyQt5 实战:批量图片添加水印工具(带右侧实时预览)(附代码及下载链接)
开发语言·qt·添加水印·图片添加水印·蹄片水印
超绝振刀怪20 小时前
【C++ vector】
开发语言·c++
机器视觉的发动机20 小时前
图像处理-机器视觉算法中的数学基础
开发语言·人工智能·算法·决策树·机器学习·视觉检测·机器视觉
Darkwanderor20 小时前
离散化思维的应用
数据结构·c++·算法·哈希算法
guohahaya20 小时前
attention-2026
开发语言·c#
PAK向日葵1 天前
【C++】整数类型(Integer Types)避雷指南与正确使用姿势
c++·安全·面试
lntu_ling1 天前
Python-基于Haversine公式计算两点距离
开发语言·python·gis算法