标签:
本文以如下的base为例,进行调试和验证,new 和delete,以及new[]和delete[]都是标准库函数,通过重载上述四个函数。
执行new表达式时,实际发生了三个步骤:
上述语句输出的是:
执行delete表达式时,实际发生了两个步骤:
上述语句输出的是:
执行new[]表达式时,实际上发生了三个步骤:
上述语句输出:
执行delete[]表达式,实际上发生了两个步骤:
上述语句输出:
注意:只有在中括号出现时,编译器才寻找数组的维度,否则它便假设只有单独一个objects要被删除。
正确使用的配对是new与delete,以及new[]与delete[]成对出现,这样才能保证内存空间的正确释放和析构函数正确的调用,但有时也会出现它们之间不是正确的配对,如下几种情况
输出:
从上述结果得到:当new一个对象,而用delete[]进行释放对象时,这与正常new和delete配对使用时,输出的内容是一样的,即释放的对象。
输出:
从上述结果得到:当使用new[]创建了多个对象,但是使用delete释放对象时,只释放的第一个对象。其它元素仍然存在——虽然其相关的内存已经被要求归还了。
标签:
原文地址:http://www.cnblogs.com/hlwfirst/p/5005255.html