【发布时间】:2012-09-12 20:08:29
【问题描述】:
这是this question 的后续行动。假设我有这个代码:
class Class {
public virtual method()
{
this->~Class();
new( this ) Class();
}
};
Class* object = new Class();
object->method();
delete object;
这是this answer 建议的简化版本。
现在,一旦从method() 中调用析构函数,对象生命周期就会结束,调用代码中的指针变量object 将变为无效。然后在同一位置创建新对象。
这是否使指向调用中对象的指针再次有效?
【问题讨论】:
-
指针失效不会完全违背放置新的目的吗?
-
为什么这个函数是虚拟的?有点吓人。
-
另外,如果
Class的构造函数抛出异常,你就陷入了道德困境。 (并且请不要称你的班级为“班级”......) -
@Luc Touraille:嗯,我不知道在正常情况下调用placement new 以在同一位置重新创建对象。
-
您是否特别担心替换是在对象的方法内完成的,而且是虚拟方法,还是我们可以用更简单的方法替换您的示例代码,例如:@ 987654327@?
标签: c++ pointers destructor object-lifetime