私はオブジェクトに動的にメモリを割り当てています。 デストラクタが呼び出されるか、delete関数がメモリを扱う方法が異なりますか?デストラクタが削除はデストラクタを呼び出す
class A
{
int x;
}
int main()
{
A *ptr = new A();
delete ptr;
return 0;
}
と呼ばれる:
は、次の例を考えてみましょうか?
私はオブジェクトに動的にメモリを割り当てています。 デストラクタが呼び出されるか、delete関数がメモリを扱う方法が異なりますか?デストラクタが削除はデストラクタを呼び出す
class A
{
int x;
}
int main()
{
A *ptr = new A();
delete ptr;
return 0;
}
と呼ばれる:
は、次の例を考えてみましょうか?
delete演算子を使用する式では、まず必要な場合に適切なデストラクタを呼び出し、関数演算子deleteを呼び出してストレージを解放します。 詳しくはhereをご覧ください。
delete
は自動的にデストラクタを呼び出し、メモリを解放します。
はい、delete
はデストラクタを呼び出します。
'A'の中にデストラクタを定義し、呼び出しを見ます!! –
これは 'delete'で呼び出されるべきですが、デストラクタにブレークポイントを設定してステップスルーするだけです。 –
Ken、削除されたポインタをNULLに設定することをお勧めします。すでに削除(割り当てられていない)メモリを削除すると、未定義の動作になりますが、NULLポインタを削除しても何も起こりません。また、あなたのすべてのリソース(メモリだけでなく)にRAIIを使用する方法を検討する必要があります。 – Dennis