前篇文章确实在使用new placement的时候,在某些情况下有问题。
class B
{
public:
B()
{
printf("B:B()\n");
}
};
class T : public B
{
public:
T(int i, int k)
{
}
void Set(int i)
{
this->~T();
new (this) T(i); //错误一
}
T( int i)
{
new (this) T(i, 10); //错误二
}
};
错误一在前篇文章的回复中已经说明了。
至于错误二,我个人认为只有在有继承关系的时候才存在问题。
例如 T a(10),结果调用基类B的构造函数两次,显然有问题。如果T没有父类呢?