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