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。

相关推荐
秋96 分钟前
Java AI编程工具全景解析:功能、收费与工单系统实战指南
java·开发语言·ai编程
会编程的土豆14 分钟前
【go】 Go语言中的 defer:从入门到理解底层机制(讲透版)
开发语言·后端·golang
一只幸运猫.16 分钟前
Google Mug库——一个现代的通用工具库
开发语言·python
民乐团扒谱机37 分钟前
【附完整代码】Python爬取古筝网曲谱图片一键生成PDF(下·PDF生成与GUI篇)
开发语言·python·pdf
代码中介商42 分钟前
C语言操作符深度解析:从基础到高级应用
c语言·开发语言
z小天才b1 小时前
Java 设计模式完全指南:从入门到精通
java·开发语言·设计模式
cpp_25011 小时前
P2249 【深基13.例1】查找
数据结构·c++·算法·题解·二分·洛谷
zs宝来了1 小时前
网络篇15-网络收发包应用之iptable
开发语言·网络·php
烤麻辣烫1 小时前
算法--二分搜索
java·开发语言·学习·算法·intellij-idea
编码浪子1 小时前
《安全 Rust 的边界在哪?》— 中文解读
开发语言·安全·rust