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

本文介绍了C++中的delete操作,包括操作符delete和函数delete的使用,强调了两者在内存释放和析构函数调用上的区别。此外,还提到了placement new的情况以及delete的一些特殊规则,如函数delete的重载与运算符delete不可重载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rel="File-List" href="file:///E:%5Ctmp%5CAPPLIC%7E1%5Cmsohtml1%5C01%5Cclip_filelist.xml">

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值