• (转)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简短多了。

  • 相关阅读:
    PL/SQL学习笔记之包
    PL/SQL学习笔记之触发器
    PL/SQL学习笔记之异常
    PL/SQL学习笔记之记录
    PL/SQL学习笔记之游标
    PL/SQL学习笔记之函数
    PL/SQL学习笔记之存储过程
    PL/SQL学习笔记之循环语句
    PL/SQL学习笔记之条件控制语句
    PL/SQL学习笔记之变量、常量、字面量、字符串
  • 原文地址:https://www.cnblogs.com/sheshiji/p/3427426.html
Copyright © 2020-2023  润新知