堆栈/堆分配数组的销毁顺序

时间:2015-06-28 16:05:49

标签: c++

考虑以下代码:

$(".a").click(function(){
    var r1 = $(this).attr("src").replace("230x128.","490x437.");
    $('#thumb').attr("src", r1);
});

标准定义的struct A{...}; A a[100]; A* pa = new A[100]; delete[] pa; / a元素的销毁顺序是否是实现定义的(第二种情况pa不是用户定义的)。

1 个答案:

答案 0 :(得分:3)

数组元素将按照构造的相反顺序进行破坏,元素99是第一个被破坏的元素,然后是元素989796 ......等。和元素0是最后一个。

请参阅isocpp析构函数常见问题解答。

从最新草案的5.3.5.6开始:

  

如果delete-expression的操作数值不是空指针值,则delete-expression将为   为对象或要删除的数组的元素调用析构函数(如果有)。 在一个案例中   数组,元素将按地址递减的顺序销毁(即完成的顺序相反)   他们的构造函数;见12.6.2)。

还有来自12.6.3(这不是delete关键字特有的):

  

初始化类对象数组(显式或隐式)并初始化元素   通过构造函数,应按照下标顺序为数组的每个元素调用构造函数;   见8.3.4。 [注意:数组元素的析构函数按其构造的相反顺序调用。 - 结束   注意]