struct B { int b_; };
struct D : B
{
~D()
{ // D object's lifetime ends here
d_ = 0; // (1) undefined behavior?
b_ = 0; // (2) undefined behavior also?
}
int d_;
};
的C++ Standard defines,对于D
类型的对象,其寿命结束时析构函数~D()
呼叫开始。
我们可以将此解释为意味着修改析构函数中的对象(如(1)中所示)会导致未定义的行为?
如果是这样,如果我们修改D
的基类子对象(如(2)中所述)是否也适用?
当析构函数〜D()调用开始时,它的生命期结束了!生命终结后!构造函数结束! – Klaus
@Klaus不正确。当析构函数调用*开始时,生命周期结束* – krzaq
@krzaq:我可以用析构函数的所有数据成员完成所有的操作。在结束'}'之前没有任何问题。那么为什么你认为生命终止于析构函数的开始呢? – Klaus