2012-02-23 13 views
1

私はオブジェクトに動的にメモリを割り当てています。 デストラクタが呼び出されるか、delete関数がメモリを扱う方法が異なりますか?デストラクタが削除はデストラクタを呼び出す

class A 
{ 
int x; 
} 

int main() 
{ 
A *ptr = new A(); 
delete ptr; 
return 0; 
} 

と呼ばれる:

は、次の例を考えてみましょうか?

+4

'A'の中にデストラクタを定義し、呼び出しを見ます!! –

+1

これは 'delete'で呼び出されるべきですが、デストラクタにブレークポイントを設定してステップスルーするだけです。 –

+0

Ken、削除されたポインタをNULLに設定することをお勧めします。すでに削除(割り当てられていない)メモリを削除すると、未定義の動作になりますが、NULLポインタを削除しても何も起こりません。また、あなたのすべてのリソース(メモリだけでなく)にRAIIを使用する方法を検討する必要があります。 – Dennis

答えて

4

delete演算子を使用する式では、まず必要な場合に適切なデストラクタを呼び出し、関数演算子deleteを呼び出してストレージを解放します。 詳しくはhereをご覧ください。

3

deleteは自動的にデストラクタを呼び出し、メモリを解放します。

0

はい、deleteはデストラクタを呼び出します。

関連する問題