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

解決


なり  2012-04-25 14:53:18  No: 73345  IP: 192.*.*.*

VC2008
WIN32プロジェクト

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

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

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

編集 削除
YuO  2012-04-26 09:51:10  No: 73346  IP: 192.*.*.*

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

編集 削除
なり  2012-04-26 10:18:18  No: 73347  IP: 192.*.*.*

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

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

編集 削除
YuO  2012-04-26 12:56:57  No: 73348  IP: 192.*.*.*

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

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

編集 削除