本地对象生命周期放入新数组

时间:2014-07-18 17:49:01

标签: c++

说我这样做:

A* p = nullptr;

{
    const A a = A(2);
    p = new A[3];
    p[0] = a;
}

什么,如果有的话,阻止a的析构函数被调用

   p[0] = a;
} <- here ?

2 个答案:

答案 0 :(得分:3)

a在那里调用析构函数 。但是,p[0] = a生成a副本。副本的生命周期一直持续到p随后被delete[]销毁并解除分配。

答案 1 :(得分:0)

A 的析构函数将在C ++ 98中调用,但p[0] = a;将在数组元素中复制 A

在C ++ 11中, A 将被移动到p [0],并且将调用A的析构函数(现在是条带化)(可能已经优化掉了)。