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

posted @ 2013-11-17 01:00  sheshiji  阅读(568)  评论(0编辑  收藏  举报