Mainで作成したクラスはデストラクタされる?

解決


なり  2012-04-25 23:53:18  No: 73345

VC2008
WIN32プロジェクト

すいません。初歩的な質問かもしれませんがお願いします。
ステップ実行で試しています。

関数Funk()で宣言したクラス
  Test t;
はFunk()終了後に~Testに入るのが確認できます。

Main()でTest t;とした場合、~Testには入ってこないのですが、それはMain自体が終了して入ってこないだけで、実際は処理されているのでしょうか?


YuO  2012-04-26 18:51:10  No: 73346

abortしたり,longjmpで抜け出したりしたりしていない限り,デストラクタは実行されます。
どのようなコードで確認されたのでしょうか。


なり  2012-04-26 19:18:18  No: 73347

ごめんなさい。自分の確認不足でした。
例外のエラーでおちてしまい終了した場合にはいっていなかったようです。
正常終了であれば問題ありませんでした。

異常終了した場合はこの場合作成したTest tはどうなるのでしょうか?


YuO  2012-04-26 21:56:57  No: 73348

C++の例外であれば,デストラクタは実行されます。
範囲外参照等であれば,デストラクタは実行されないでしょう。

異常終了したのであれば,そもそもプロセスが終了するわけですから,
Test tはメモリごとシステムによって回収されます。
当然,システム管理下リソースはシステムが面倒を見てくれますが,リソース回収以上のことはしてくれません。
# TCP/IPでの行儀の良いクローズ等


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加