しまてく

学んだ技術を書きためるブログ

オブジェクトの破棄の順番

いままで明確に意識してなかったし、する必要もありませんでした。

が、今日順番が大事なコードを書いたので調べてみました。

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のスコープを抜ける時に、

  1. obj_Bが破棄される
  2. obj_Aが破棄される


という事で、C++では宣言した順宣言した順の逆に破棄されます。
(※中括弧でスコープをいじる等、特に何もしない場合ね)


うーん、普段意識しない(それが問題?)からいざ必要になると
ちょっと止まりますね><