【发布时间】:2017-03-27 10:40:29
【问题描述】:
例如:
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)?
【问题讨论】:
-
its lifetime ends when the destructor ~D() call starts不!生命结束后!构造函数结束! -
@Klaus 不正确。当析构函数调用 starts 时生命周期结束
-
@krzaq:我可以在析构函数中使用它的所有数据成员做所有事情。在达到结束“}”之前没有任何问题。那么为什么你认为生命周期在析构函数开始时结束?
-
代码很好,原因与
struct X { int a; X() { a = 0; } };很好的原因基本相同:可以在对象正在构造或销毁时分别从构造函数或析构函数中传递地引用成员。跨度> -
@LeoHeinsaar:KerrekSB 的示例显示的是赋值,而不是初始化。
标签: c++ language-lawyer destructor undefined-behavior lifetime