现在的位置: 首页 > 综合 > 正文

C++中的delete—— C++中的new之姊妹篇

2012年09月01日 ⁄ 综合 ⁄ 共 639字 ⁄ 字号 评论关闭

C++中的delete

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

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

delete pointer;

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

void operator delete(void *buffer);

举个例子,语句delete
ps;
psstring指针)

对应的代码可能是这样的:

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

抱歉!评论已关闭.