2011-10-23 9 views
0

オブジェクトを上書きするときにConstructorとDestructorの呼び出しの順序を理解しようとしています。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 

- デストラクタがある場合

なぜ:: XX = 14でありますと呼ばれる?それは11ではありませんか?

答えて

2

なぜ11であるべきですか? zA(14)に再割り当てするので、最後は14です。

(あなたの編集後:あなたはまた、割り当ての終わりに破壊されるテンポラリーA(14)オブジェクトのデストラクタを参照)

+0

しかし、xの最初の印刷は、デストラクタ中に起こる最初のインスタンスの場合はそうAはまだ破壊されていませんが、xはまだ存在してはいけません11 – pulekies

+0

各オブジェクトはメンバ変数の別のコピーを保持しています。あなたは、標準的なメンバである参照または静的なメンバを持っていません。 –

+0

'A :: xx = 14 'を持つ最初の'〜A() 'は、' z'を14に変更し終わったので一時的なデストラクタです。そして、 'z'は主に終了し、' z'は破壊され、 〜A()とA :: xx = 14 ' –

関連する問題