请问delete []p是怎么实现析构多个对象?

版主大哥 2012-09-24 11:26:37
T* p = new T[10]的时候只返回了第一个对象的地址,然后delete的时候却只传进去第一个对象的指针,是不是delete[]内部实现中记录了new T时对象的个数?然后delete[]时就一个一个去析构?要是记录了new这样的函数不是得用一个全局变量去记录,这样是不是不好...或者是用其他的什么方法做到的?
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2012-09-24
  • 打赏
  • 举报
回复
new分配的元素,都会有分配元素个数的.
可以通过以下代码取得元素个数

A *pA = new A[11];
A *pCopyA = pA;
int nCount = *((int *)pCopyA-1);
delete [] pA;

matrixcl 2012-09-24
  • 打赏
  • 举报
回复
new T[] 的时候,系统会在返回给你的指针前方存储分配的空间; delete [] 的时候会读取这个数值,然后释放
erave5 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

new分配的元素,都会有分配元素个数的.
可以通过以下代码取得元素个数

A *pA = new A[11];
A *pCopyA = pA;
int nCount = *((int *)pCopyA-1);
delete [] pA;
[/Quote]
int nCount = *((int *)pCopyA-1);这句不一定对的,但思路是对。在申请到的(程序员看到的)内存前面,是有一些数据表示申请的个数,但不一定就是前面4字节,它依赖于C++运行库的实现
My_Love 2012-09-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

new分配的元素,都会有分配元素个数的.
可以通过以下代码取得元素个数

A *pA = new A[11];
A *pCopyA = pA;
int nCount = *((int *)pCopyA-1);
delete [] pA;
[/Quote]
意思是这个意思,但不可靠,具体的实现依赖编译器。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧