- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++の話です。)
クラス内での静的メンバ変数のデストラクタ呼び出し方法
このQ&Aのポイント
- C++のクラス内に静的メンバ変数を宣言し、そのデストラクタを呼び出す方法について質問です。
- デストラクタが呼ばれない状況を確認し、newやdeleteを使わずにデストラクタを呼び出す方法を知りたいです。
- サンプルコードを用いてデストラクタが呼ばれない現象を再現し、デバッガを使っても呼ばれないことを確認しました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
静的メンバ変数はクラス内で宣言しただけでは実体が生成されない。 したがってデストラクタどころかコンストラクタも呼ばれない。 なので、Testクラスに、 Test() { std::cout<<"コンストラクタが呼ばれました"<<std::endl; } などと追加してもデストラクタ同様に呼ばれないはずである。 この実体を生成するにはたとえば、 ... class A{ private: static Test T; }; Test A::T; int main(){ A a; return 0; } のようにしてやればA::Tの実体が生成され、 破棄されるときにはデストラクタも呼ばれる。
その他の回答 (1)
- hitomura
- ベストアンサー率48% (325/664)
回答No.2
Test A::T; を追加しましょう。 クラスの中にスタティックメンバ変数を書いた場合、それは宣言として扱われます。 それとは別にどこかでそのスタティックメンバ変数を定義しなくてはなりません。
お礼
おっしゃる通りにしたら上手くできました。 ありがとうございました。