1

私はC++クラスを持っていMyClassます。これには、コンストラクタ、デストラクタ、およびintポインタが含まれていますprivate: int *MyPtr;

どこかで、MyClassオブジェクトを動的に割り当てます。

MyClass *my = new MyClass(); //...

それから私は電話しますdelete my;

MyClass次のようなものを使用するデストラクタが必要delete MyPtrですか?それとも、私が電話したときにMyPtrが破壊されたのdelete myですか?

4

3 に答える 3

5

MyPtr insid MyClassコンストラクターを割り当てた場合は、それを削除するのはユーザーの責任です。そうしないと、未割り当てのメモリを削除すると、未定義の動作が発生します。

慣用的な方法は、メモリを動的に割り当てて削除する必要がある場合にクラス内でスマートポインタを使用することです。スマートポインタは、メモリの割り当て解除を処理します。

読む価値のあるprobaby:三つのルール

于 2013-01-15T07:05:11.567 に答える
3

Or is that MyPtr destroyed when I call delete my?

いいえ、delete my;これを呼び出すと、のデストラクタが呼び出されます。デストラクタでMyClassMyPtrを明示的に削除しない限り、メモリリークが発生します。

Should MyClass have a destructor which uses something like delete MyPtr?

デストラクタで動的に割り当てられたメモリを常に削除します。これがデストラクタの目的です。

于 2013-01-15T07:04:58.733 に答える
0

電話するとき

delete my

(デストラクタで指定しない限り)そのクラスのデータの割り当てを解除しないため、メモリリークが発生します。

于 2013-01-15T07:07:52.173 に答える