T* p = new T[10]的时候只返回了第一个对象的地址,然后delete的时候却只传进去第一个对象的指针,是不是delete[]内部实现中记录了new T时对象的个数?然后delete[]时就一个一个去析构?要是记录了new这样的函数不是得用一个全局变量去记录,这样是不是不好...或者是用其他的什么方法做到的?
...全文
1044打赏收藏
请问delete []p是怎么实现析构多个对象?
T* p = new T[10]的时候只返回了第一个对象的地址,然后delete的时候却只传进去第一个对象的指针,是不是delete[]内部实现中记录了new T时对象的个数?然后delete[]时就一个一个去析构?要是记录了new这样的函数不是得用一个全局变量去记录,这样是不是不好...或者是用其他的什么方法做到的?
A *pA = new A[11];
A *pCopyA = pA;
int nCount = *((int *)pCopyA-1);
delete [] pA;
[/Quote]
int nCount = *((int *)pCopyA-1);这句不一定对的,但思路是对。在申请到的(程序员看到的)内存前面,是有一些数据表示申请的个数,但不一定就是前面4字节,它依赖于C++运行库的实现