我们知道,当我们写程序时,栈区的内存是非常小的,如果是写那种大型的项目,不够用是很正常的,所以我们需要在堆区申请内存;
但是如果在堆区申请了大量的内存,导致没有空间了,那么程序就会崩溃,很烦人;我们做程序,想要的并不是崩溃,因为程序一旦崩溃就代表什么都做不了;我们需要的是如果内存不足,程序不要崩溃掉,返回一个错误或者空地址就行了,我们根据返回值在来进行不同的操作;这就要用到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的知识就总结到这里了,感谢观看!