C++の覚書 デストラクタの注意点
今後の注意点として書いておく。
結論からいうとクラスを宣言したスコープでexit関数を呼び出すとそのクラスのデストラクタは呼び出されない。
以下がその例。
#include <iostream> class hoge { public: hoge() { std::cout << "called instance" << std::endl; }; ~hoge() { std::cout << "called destractor" << std::endl; }; }; int main(int argc, char *argv[]) { hoge a; exit(EXIT_FAILURE); return 0; }
実行結果
called instance
対策として
- exit関数で終了しない
- staticを付ける
int main(int argc, char *argv[]) { static hoge a; exit(EXIT_FAILURE); return 0; }
- グローバル変数として宣言する
hoge a; int main(int argc, char *argv[]) { exit(EXIT_FAILURE); return 0; }