オブジェクトの破棄の順番
いままで明確に意識してなかったし、する必要もありませんでした。
が、今日順番が大事なコードを書いたので調べてみました。
C++におけるオブジェクトの破棄の順番
検証コード
// テストクラス class CTestClass { public: /*! @brief コンストラクタ */ CTestClass(CString name) { m_name = name; } /*! @brief デストラクタ */ ~CTestClass(void) { // コンストラクタで渡された文字列を表示 MessageBox( NULL, m_name, _T(""), MB_OK ); } private: // メンバ変数 CString m_name; }; // 実際につかってみる void HogeFunction() { CTestClass obj_A( _T("A") ); CTestClass obj_B( _T("B") ); }
結果
HogeFunctionのスコープを抜ける時に、
- obj_Bが破棄される
- obj_Aが破棄される
という事で、C++では宣言した順宣言した順の逆に破棄されます。
(※中括弧でスコープをいじる等、特に何もしない場合ね)
うーん、普段意識しない(それが問題?)からいざ必要になると
ちょっと止まりますね><