2011-10-24 11 views
2

classのユーザー定義デストラクタが存在せず、1つが必要な場合、コンパイラは暗黙的にデストラクタを宣言します。自分のデストラクタを宣言する必要があるときは?私自身のデストラクタを宣言する必要があるときは?

+1

クラスには常にデストラクタがあります。 –

+3

しかし、必ずしもユーザー定義のデストラクタではありません。 – GolezTrol

+3

[こちら](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)を参照してください。 –

答えて

4

暗黙のうちに宣言されたデストラクタは、必要な処理を実行しません。

これはやや複雑です。検索してrule of threeを調べる必要があります。

+9

Googleへのリンクを投稿するのではなく、[この優秀なSO質問](http://stackoverflow.com/questions/4172722)へのリンクを投稿してください。 –

+0

私はそれを行うと検索結果で4位です。 :) –

+0

また、多態性クラスが必要な場合は、空の仮想デストラクタを宣言する必要があるということもあります。 –

1

メモリを割り当てる場合は、オブジェクトを作成するか、コンストラクタ内で作成するか、それ以降はオブジェクトを破棄するときにクリーンアップする必要があります。

1

何かが完了したことを確認したいとき。 '何か'は、通常、ネットワーク接続やファイルを閉じたり、メモリなどを解放したりします。

1

オブジェクトの破壊に関する特別なタスク、つまりメモリの割り当て解除、ネットワーク接続のクローズ、スレッド同期、スローされた例外のスローなど

+0

「ストアされた例外をスローする」 - 警告ですが、デストラクタからスローすることは軽くやりたいことではありません!可能な場合は限られたケースがありますが、あなたのプログラムが有用なことを伝えずに終了する状況を避けることはかなり困難です。 –

関連する問題