• 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的知识就总结到这里了,感谢观看! 

  • 相关阅读:
    Lab3 存储过程与触发器
    java操作gaussDB数据库
    加密的艺术:密文的创建和校验
    Okaleido生态核心权益OKA,尽在聚变Mining模式
    分析非学历培训管理系统系统架构及功能
    gflags学习笔记(一)gflags的介绍和安装(ubuntu环境)
    开发知识点-Django
    【信息安全原理】——IP及路由安全(学习笔记)
    Vue实现分页功能
    【vue设计与实现】异步组件与函数式组件 4 - 重试机制
  • 原文地址:https://blog.csdn.net/qq_52572621/article/details/128190773