zoukankan      html  css  js  c++  java
  • c++笔记--new和delete(一)

    前面的话:我们都知道,当我们调用new来分配内存的时候,首先会分配内存,其次调用构造函数,最后返回指针。

    对于第二步失败,我们后面也将介绍,第二步失败时会调用对应的delete来释放内存。本文主要探讨第一步失败的情况。

    (一)内存分配失败的时候一般会怎么处理?

    (1)c中,malloc如果失败会返回空指针

    (2)早期的c++编译器,内存分配失败也是返回空指针

    (3)可能由于加入异常机制,后来new失败的时候会抛出异常

    (二)如何定制自己的内存分配不足时候的策略?set_new_handler

    (1)什么是new_handler?

    用以处理内存分配不足的函数叫做new_handler,它本质是个函数指针,可以通过set_new_handler来进行设置。

    具体声明如下:

    namespace std{

         typedef void (*new_handler)();

         new_handler set_new_handler(new_handler p) throw();

    }

    (2)new_hanlder可以做哪些工作?

    1、删除其它无用的内存,使系统具有可以更多的内存可以使用,为下一步的内存申请作准备。

    实现此策略的办法是:程序一开始执行就分配一大块内存,当new_handler被调用时,将它们释放还给程序使用。

    2、设置另外一个new_handler。

    如果当前的new_handler不能够做到更多的内存申请操作,或者它知道另外一个new_handler可以做到,

    则可以调用set_new_handler函数设置另外一个new_handler,这样在operator new下一次调用的时候,

    可以使用这个新的new_handler。

    3、卸载new_handler,使operator new在下一次调用的时候,因为new_handler为空抛出内存申请异常。

    4、new_handler抛出自定义的异常

    5、不再返回,调用abort或者exit退出程序

    (3)如何对自己的类定制new_handler?

    对于自己的类定制new_handler,需要重载new,在重载new函数中调用set_new_handler来设置。

  • 相关阅读:
    零开始:NetCore项目权限管理系统:登录授权
    零开始:NetCore项目权限管理系统:定义基本接口和实现
    零开始:NetCore项目权限管理系统:基础框架搭建
    javascript匿名函数
    锚链接
    前端面试题(js部分)
    font-size:100%
    line-height影响排版
    设置苹果手机input按钮和button按钮颜色显示问题
    !important的用法及作用
  • 原文地址:https://www.cnblogs.com/cane/p/3800201.html
Copyright © 2011-2022 走看看