(转)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简短多了。
(转)C++中的delete的更多相关文章
- 关于JavaScript中的delete操作
关于JavaScript中的delete操作 看到一道题,是这样的: (function(x){ delete x; return x; })(1); 1 null undefined Error 我 ...
- 深入理解javascript 中的 delete(转)
在这篇文章中作者从<JavaScript面向对象编程指南>一书中关于 delete 的错误讲起,详细讲述了关于 delete 操作的实现, 局限以及在不同浏览器和插件(这里指 firebu ...
- Javascript中的delete
一.问题的提出 我们先来看看下面几段代码,要注意的是,以下代码不要在浏览器的开发者工具(如FireBug.Chrome Developer tool)中运行,原因后面会说明: 为什么我们可以删除对象的 ...
- 数据库开发——参照完整性——在外键中使用Delete on cascade选项
原文:数据库开发--参照完整性--在外键中使用Delete on cascade选项 原文: http://www.mssqltips.com/sqlservertip/2743/using-dele ...
- 在类的成员函数中调用delete this
最近面试的时候被问到一个问题是,在C++中,能否在类的成员函数中调用delete this,后来网上查了一下资料,关于这个问题说得比较好的有http://blog.sina.com.cn/s/blog ...
- MySQL中drop,delete与truncate的区别
drop直接删掉表 truncate删除表中数据,再插入时自增长id又从1开始 delete删除表中数据,可以加where字句. (1) DELETE语句执行删除的过程是每次从表中删除一行,并且同时将 ...
- Javascript中的delete介绍
关于JavaScript中的Delete一直没有弄的很清楚,最近看到两篇这方面的文章,现对两文中部分内容进行翻译(内容有修改和添加,顺序不完全一致,有兴趣推荐看原文),希望能对大家有所帮助 一.问题的 ...
- JS中的delete操作符
首先,delete删除成功返回true,失败返回false. js代码: function wxCount ($element) { this.init($element); } wxCount.pr ...
- MySQL_(Java)使用JDBC向数据库中删除(delete)数据
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC向数据库中插入(insert)数据 传送门 MySQL_(Java)使用JDBC向数据库中删除(d ...
- javascript 中的 delete
那么,为什么我们能删除一个对象的属性: var x = { a: 1 }; delete x.a; // true x.a; // undefined 但却不能删除一个变量: var x = 1; d ...
随机推荐
- [LC] 66. Plus One
Given a non-empty array of digits representing a non-negative integer, plus one to the integer. The ...
- hadoop配置文件详解、安装及相关操作补充版
一. Hadoop伪分布配置 首先应该现在profile文件添加hadoop_home操作如下: export JAVA_HOME=/usr/java/jdk expor ...
- the way of hardware design study
1.器件 主要分类 1.MCU2.DSP3.FPGA4.Embedded5.System on Chip MCU MCU俗称单片机,通常无操作系统,用于简单的控制,如电梯,空调等. DSP DSP叫做 ...
- python Post 登录 cookies 和session
def post_name(): print('\npost name') # http://pythonscraping.com/pages/files/form.html data = {'fir ...
- 設定MacOS 終端機環境 (Homebrew/zsh/oh-my-zsh/iTerm2)
安裝Homebrew 1 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/in ...
- PAT B1080 MOOC期终成绩(C++)
PAT甲级目录 | PAT乙级目录 题目描述 B1080 MOOC期终成绩 解题思路 可利用 map 将字符串型的学号转换为整型的序号,方便查找.输入全部成绩后,遍历每个学生同时计算最终成绩,然后将成 ...
- 5G-NR物理信道与调制-下行链路v1.1.0
上接<5G-NR物理信道与调制v1.1.0>下行链路 References Definitions, symbols and abbreviations 帧结构与物理资源 通用函数 上行链 ...
- 前沿理论、反思创新、产学结合——你不能错过的WSDM 2016大会
第九届ACM网络搜索与数据挖掘国际会议(ACM International Conference on Web Search and Data Mining,简称WSDM)已于上周(2月22日-25日 ...
- Html学习笔记(二) 简单标签
标签的重点 标签的用途 标签在浏览器中的默认样式 <body>标签: 在网页上显示的内容 <p>标签: 添加段落 <hx>标签: 添加标题 标签一共有6个,h1.h ...
- IO和流
I/O和流 I/O是Input和Output的缩写 从读写设备,包括硬盘文件,内存,键盘输入,屏幕输出,网路 输入输出"内容"(字节或文本) 流是对输入输出设备的一种抽象 从流中读 ...