C++ std::nothrow

我们知道,当我们写程序时,栈区的内存是非常小的,如果是写那种大型的项目,不够用是很正常的,所以我们需要在堆区申请内存;

但是如果在堆区申请了大量的内存,导致没有空间了,那么程序就会崩溃,很烦人;我们做程序,想要的并不是崩溃,因为程序一旦崩溃就代表什么都做不了;我们需要的是如果内存不足,程序不要崩溃掉,返回一个错误或者空地址就行了,我们根据返回值在来进行不同的操作;这就要用到std::nothrow了

以我自己的电脑为例,先在栈区分配内存:

先在栈区申请10 0000*4字节的内存,运行一下,程序正常,并没有崩溃

加大申请空间100 0000*4 看看是否会崩溃掉:

程序出现了异常;

那么我们换一种方式,在堆区申请:

没有问题,那么加大申请空间到1000 0000*4 :

还是没有崩溃,那么继续:

因为堆区内存空间与计算机的物理内存有关,大家计算机申请的最大值可能不一样,我这里到5 0000 0000*4就崩溃了,如下:

这里需要注意,弹出如下窗口,或者程序退出代码不为0才叫程序崩溃:

如果你连编译都通过不了,那不叫崩溃,那是语法出错了;程序运行死掉了才叫崩溃,编译都通过不了,肯定是语法问题,如下:

申请了太多了编译是无法通过的;

大家注意,申请堆区空间需要编译通过、循行卡死才能使用我们的std::nothrow 

我这里申请到5 0000 0000*4字节的时候编译能通过,但是一运行就死掉了,很烦

我们可以使用std::nothrow

在new后面加std::nothrow意思就是,如果空间不足,返回nullptr,程序不会崩溃,如下:

可以看到,没有崩溃,那么我们就可以根据返回值,进行业务处理了,如下:

这样就达到我们的目的了,程序也没有崩溃掉;

关于std::nothrow的知识就总结到这里了,感谢观看! 

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值