社区
C++ 语言
帖子详情
关于delete……
s__c__007
2009-03-08 05:27:06
用new申请完内存之后
用delete 释放内存时,语句为
delete []p;
而中括号内无须声明申请内存的个数
请问为什么啊??
谢谢各位高手~
...全文
62
4
打赏
收藏
关于delete……
用new申请完内存之后 用delete 释放内存时,语句为 delete []p; 而中括号内无须声明申请内存的个数 请问为什么啊?? 谢谢各位高手~
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pengzhixi
2009-03-08
打赏
举报
回复
[Quote=引用楼主 s__c__007 的帖子:]
用new申请完内存之后
用delete 释放内存时,语句为
delete []p;
而中括号内无须声明申请内存的个数
请问为什么啊??
谢谢各位高手~
[/Quote]
delete[]p;是针对new数组来的,实际上老版本的c++在[]里面是要注明你分配的数量的。但是后面的版本不需要,因为一般在new分配的数组返回的地址前面4个字节里面记载了分配的内存空间的大小。所以delete[]p的中括号里面不需要注明分配内存的大小。
s__c__007
2009-03-08
打赏
举报
回复
谢谢
膜拜一下~
liao05050075
2009-03-08
打赏
举报
回复
对于系统自有的数据类型,语言本身就能区分内存块的大小,而对于自定义数据类型(如我们自定义的类),则 operator new 和 operator delete 之间需要互相传递信息。
当我们使用 operator new 为一个自定义类型对象分配内存时,实际上我们得到的内存要比实际对象的内存大一些,这些内存除了要存储对象数据外,还需要记录这片内存的大小,此方法称为 cookie.这一点上的实现依据不同的编译器不同。(例如 MFC 选择在所分配内存的头部存储对象实际数据,而后面的部分存储边界标志和内存大小信息。g++ 则采用在所分配内存的头 4 个自己存储相关信息,而后面的内存存储对象实际数据。)当我们使用 delete operator 进行内存释放操作时,delete operator 就可以根据这些信息正确的释放指针所指向的内存块。
以上论述的是对于单个对象的内存分配/释放,当我们为数组分配/释放内存时,虽然我们仍然使用 new operator 和 delete operator,但是其内部行为却有不同:new operator 调用了operator new 的数组版的兄弟- operator new[],而后针对每一个数组成员调用构造函数。而 delete operator 先对每一个数组成员调用析构函数,而后调用 operator delete[] 来释放内存。需要注意的是,当我们创建或释放由自定义数据类型所构成的数组时,编译器为了能够标识出在 operator delete[] 中所需释放的内存块的大小,也使用了编译器相关的 cookie 技术。
文章出处:http://www.diybl.com/course/3_program/c++/cppjs/2008106/148074.html
liao05050075
2009-03-08
打赏
举报
回复
使用new申请内存后,系统有记录它申请的内存的大小。于是delete的时候只要把内存地址传给它就行了
delete
和
delete
[]的真正区别
c++中对new申请的内存的释放方式有
delete
和
delete
[两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明:
delete
释放new分配的单个对象指针指向的内存
delete
[] 释放new分配的对象数组指针指向的内存 那么,按照教科书的理解,我们看下下面的代码: int *a = new int[10];
delete
a; //方
delete
和
delete
[]的理解
对于
delete
[]而言,他是如何知道要调用多少个对象的析构函数的
C++中
delete
和
delete
[]的真正区别
c++
MySQL
delete
语句
mysql 中
delete
语句主要分为三个层次,下面简单介绍下 1. 最基础的条件删除,如下所示
DELETE
FROM table_name where table_name.name='dell' 还有一种按序删除的方式如下
DELETE
FROM customers ORDER BY Name LIMIT 10 2.MySQL
DELETE
语句使用INNER JOIN...
TDengine时序数据库实战
TDengine时序数据库实战
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章