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。

相关推荐
轩情吖几秒前
MySQL之表的增删查改
android·开发语言·c++·后端·mysql·adb·
2301_793804694 分钟前
C++与硬件交互编程
开发语言·c++·算法
csbysj202011 分钟前
jEasyUI 转换 HTML 表格为数据网格
开发语言
茉莉玫瑰花茶14 分钟前
CMake 工程指南 - 工程场景(3)
c++·mfc
历程里程碑15 分钟前
39. 从零实现UDP服务器实战(带源码) V1版本 - Echo server
服务器·开发语言·网络·c++·网络协议·udp·php
Book思议-16 分钟前
【数据结构实战】:基于C语言单链表实现红旗渠景区年卡信息管理系统
c语言·开发语言·数据结构
Chase_______16 分钟前
【快速入手 Python 基础 | 第1章】:数据存储与运算
开发语言·python
骇客野人18 分钟前
Java springboot里注解大全和使用指南
java·开发语言·spring boot
add45a25 分钟前
C++与自动驾驶系统
开发语言·c++·算法
&星痕&26 分钟前
从零开始手搓 (1)计算图 (c++,python语言实现)
c++·python·深度学习·机器学习