说我这样做:
A* p = nullptr;
{
const A a = A(2);
p = new A[3];
p[0] = a;
}
什么,如果有的话,阻止a
的析构函数被调用
p[0] = a;
} <- here ?
答案 0 :(得分:3)
a
在那里调用析构函数 。但是,p[0] = a
生成a
的副本。副本的生命周期一直持续到p
随后被delete[]
销毁并解除分配。
答案 1 :(得分:0)
A 的析构函数将在C ++ 98中调用,但p[0] = a;
将在数组元素中复制 A 。
在C ++ 11中, A 将被移动到p [0],并且将调用A的析构函数(现在是条带化)(可能已经优化掉了)。