• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++の話です。)

クラス内での静的メンバ変数のデストラクタ呼び出し方法

このQ&Aのポイント
  • C++のクラス内に静的メンバ変数を宣言し、そのデストラクタを呼び出す方法について質問です。
  • デストラクタが呼ばれない状況を確認し、newやdeleteを使わずにデストラクタを呼び出す方法を知りたいです。
  • サンプルコードを用いてデストラクタが呼ばれない現象を再現し、デバッガを使っても呼ばれないことを確認しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • vaguechat
  • ベストアンサー率85% (47/55)
回答No.1

静的メンバ変数はクラス内で宣言しただけでは実体が生成されない。 したがってデストラクタどころかコンストラクタも呼ばれない。 なので、Testクラスに、 Test() { std::cout<<"コンストラクタが呼ばれました"<<std::endl; } などと追加してもデストラクタ同様に呼ばれないはずである。 この実体を生成するにはたとえば、 ... class A{ private: static Test T; }; Test A::T; int main(){ A a; return 0; } のようにしてやればA::Tの実体が生成され、 破棄されるときにはデストラクタも呼ばれる。

mentalplus
質問者

お礼

おっしゃる通りにしたら上手くできました。 ありがとうございました。

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

Test A::T; を追加しましょう。 クラスの中にスタティックメンバ変数を書いた場合、それは宣言として扱われます。 それとは別にどこかでそのスタティックメンバ変数を定義しなくてはなりません。

関連するQ&A