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。

相关推荐
fu15935745682 分钟前
【使用python代码制作数学逻辑动画】 ——【教程】
开发语言·python
Shadow(⊙o⊙)14 分钟前
Linux基础IO-1.0——open、close、read及write-深入手搓分析!
linux·运维·服务器·开发语言·c++·学习
我是一颗柠檬14 分钟前
【JDK8新特性】Stream流API上Day4
java·开发语言·后端
A南方故人17 分钟前
将容器内的元素变为可拖拽
开发语言·javascript·ecmascript
小小de风呀19 分钟前
de风——【从零开始学C++】(九)—vector的基本使用
开发语言·c++
MepSUxjvy20 分钟前
002:RAG 入门-LangChain 读取文本
开发语言·python·langchain
我是一颗柠檬21 分钟前
【JDK8新特性】方法引用与构造器引用Day3
java·开发语言·后端·intellij-idea
子榆.21 分钟前
CANN自定义GEMM算子(Ascend C手写高性能矩阵乘法)
c语言·开发语言·矩阵
L_090725 分钟前
【C++】数据结构之哈希表(散列表)
数据结构·c++·散列表
LB211233 分钟前
C++通讯录课设(西安石油大学)
开发语言·c++·算法