(转)C++中的delete
2024-09-07 08:42:12
转载自: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简短多了。
最新文章
- 计算Div标签内Checkbox个数或已被disabled的个数
- 【python】引用其他目录文件
- 关于SQLSERVER中用SQL语句查询的一些个人理解
- ASP.NET利用WINRar实现在线解压缩文件
- 【转】web集群时session同步的3种方法
- sql语句面试总结
- [PWA] sw-precache
- css案例学习之全局声明*{} 与body{}的区别
- django FileFIeld和ImageField 上传路径改写
- [OpenCV] 编译源程序 2.4.10 以支持 CUDA
- 运行Office 2007安装程序提示:";找不到Office.zh-cn\OfficeMUI.xml";(转载)亲测
- 利用PHP访问数据库——实现分页功能与多条件查询功能
- plsql中文乱码
- FluentScheduler:开源轻量级定时任务调度架构
- window7安装python的xgboost库方法
- 解题4(NumberToEnglish )
- mysql的联合索引的误解
- Powerdesign使用小技巧(转载)
- 2014.8.25 CAD系统事件触发流程
- Linux acpi off学习的必要
热门文章
- [LC] 318. Maximum Product of Word Lengths
- Qt5 提示:无法启动此程序,计算机丢失Qt5Widgetsd.dll的解决方法
- ServletContext+ServletConfig内容
- Linux用户与用户组的关系
- 微软亚洲研究院开源图数据库GraphView
- array, matrix, list and dataframe
- Android实习生 —— 屏幕适配及布局优化
- 泰拉瑞亚Linux主机打造指南
- harbor自动清理镜像
- Dart的JIT 与 AOT