可能的重复:
new[] 与 delete 配对怎么可能只导致内存泄漏? https://stackoverflow.com/questions/1913343/how-could-pairing-new-with-delete-possibly-lead-to-memory-leak-only
删除与删除[] https://stackoverflow.com/questions/4255598/delete-vs-delete
我刚开始学习C/C++,被告知使用delete删除单个对象,使用delete[]删除数组。
然后我发现这个网站 http://www.devbistro.com/tech-interview-questions/Cplusplus.jsp问这个问题
这段代码有什么问题吗?
T *p = new T[10];
delete p;
注意:错误的回复:“不,一切都是正确的”,“只有第一个
数组的元素将被删除”, “整个数组将被删除
已删除,但只会调用第一个元素析构函数”。
这就提出了一个问题,该代码块中发生了什么?我逻辑上认为这是“只有数组的第一个元素将被删除”,但似乎不是。任何人都可以解释这一点吗?
一个很好的思考方式是将delete视为一条指令,而将delete[]视为一个循环;其中循环数组,并在数组中的每个变量上单独调用删除。这不是它在现实中的工作原理(真正的工作原理有点复杂),但这是理解差异的好方法。
对所有对象调用析构函数,因为在某些情况下(例如包含指针的对象数组的情况),仅对第一个元素调用析构函数不会释放所有内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)