0
即時覆蓋對象時,試圖理解構造函數和析構函數調用的順序。C++ - 覆蓋期間調用析構函數時的類成員
我的代碼是:
class A
{
public:
A(int n): x(n)
{ cout << "A(int " << n << ") called" << endl; }
~A()
{ cout << "~A() with A::x = " << x << endl; }
private:
int x;
};
int main()
{
cout << "enter main\n";
int x = 14;
A z(11);
z = A(x);
cout << "exit main" << endl;
}
-
的輸出是:
enter main
A(int 11) called
A(int 14) called
~A() with A::xx = 14
exit main
~A() with A::xx = 14
-
爲什麼是A :: XX = 14時的析構函數叫什麼名字?難道不是11?
但X的第一次印刷的析構函數中發生的,因此,如果第一個實例A還沒有被銷燬,不應該x仍然是11 – pulekies
你知道每個對象都保存着一個單獨的成員變量副本嗎?你沒有參考或靜態的,只是一個普通的成員。 –
第一個具有A :: xx = 14的'〜A()是臨時變量的析構函數,因爲它已經完成了將'z'改爲14的操作。然後main結束,並且'z'被銷燬,顯示第二個' 〜A()與A :: xx = 14'。 –