zoukankan      html  css  js  c++  java
  • (转)C++中的delete

      转载自:http://blog.csdn.net/sparkliang/article/details/3670930

      为了防止内存泄漏,每一个动态内存分配必须有一个等同相反的内存释放操作,delete和new相对应,也有作为操作符的delete和作为函数的delete。

      

      第一,操作符delete,对应操作符new,释放内存,并自动调用类的析构函数,调用格式:

        delete pointer;

      

      第二,函数delete,对应函数new,操作符delete会调用函数delete释放内存,函数原型是:

        void operator delete(void *buffer);

      举个例子,语句delete ps;(ps是string指针)
      对应的代码可能是这样的:

        ps->~string();
        operator delete(ps);

      最后需要注意的是如果使用了placement new,这种情况下需要显式调用类的析构函数,而不要调用操作符delete,因为这块内存不是由函数new分配的,只有你知道它来自哪里。

      最最后再回忆一下今天的内容吧:

      1. 函数delete

        void operator delete(void *buffer);  // 释放buffer所指向的内存。

      2. 运算符delete,最常用的,没什么可说的。

      3. 函数delete不会自动调用类的析构函数,因为它对分配的内存类型一无所知;而运算符delete会自动调用类的析构函数。

      4. 函数delete允许重载,而运算符delete不能被重载。

      5. placement new返回的地址,需要显式调用类的析构函数,而不要调用操作符delete。

      6. 比new简短多了。

  • 相关阅读:
    lua math 库
    【转】Lua 操作系统库
    lua学习笔记(十三)
    lua学习笔记(十二)
    lua学习笔记(十一)
    lua学习笔记(十)
    lua学习笔记(九)
    lua学习笔记(八)
    lua学习笔记(七)
    lua学习笔记(六)
  • 原文地址:https://www.cnblogs.com/sheshiji/p/3427426.html
Copyright © 2011-2022 走看看