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。

相关推荐
南行*6 分钟前
C语言Linux环境编程
linux·c语言·开发语言·网络安全
Morwit8 分钟前
Qt qml创建c++类的单例对象
开发语言·c++·qt
June`8 分钟前
IO模型全解析:从阻塞到异步(高并发的reactor模型)
linux·服务器·网络·c++
古城小栈11 分钟前
Rust 已经自举,却仍需GNU与MSVC工具链的缘由
开发语言·rust
YxVoyager14 分钟前
Qt C++ :QRegularExpression 正则表达式使用详解
c++·qt·正则表达式
jarreyer15 分钟前
数据项目分析标准化流程
开发语言·python·机器学习
闻缺陷则喜何志丹16 分钟前
【回文 字符串】3677 统计二进制回文数字的数目|2223
c++·算法·字符串·力扣·回文
李余博睿(新疆)18 分钟前
c++分治算法
c++
你怎么知道我是队长18 分钟前
C语言---printf函数使用详细说明
c语言·开发语言
liulilittle20 分钟前
俄罗斯访问欧洲国际线路优化
开发语言·网络·信息与通信·ip·通信·俄罗斯·莫斯科