これは、最も基本的な用途を除いて C++ で使用new
したことがないため、単なる好奇心のためです。delete
私はそれdelete
がメモリを解放することを知っています。私が疑問に思っているのは、より複雑なケースをどのように処理するのですか?
たとえば、次のようなユーザー定義クラスがあるとします。
class MyClass
{
public:
MyClass();
~MyClass()
{
delete [] intArray;
}
//public members here
private:
int* intArray;
};
クラスが何らかの方法でメモリを割り当てintArray
、デストラクタで解放すると仮定すると、次のようにクラスを使用した場合MyClass* myClass = new MyClass();
:delete myclass;
delete
すべてのメモリの解放をどのように処理しますか? クラス デストラクタは、最初に呼び出されて、クラスによって割り当てられたすべてのメモリを解放し (つまりint* intArray
)、クラスを保持するために割り当てられたメモリを解放しますか?
次のようなクラスがあるとしたらどうでしょうか。
class MyClass
{
public:
MyClass();
~MyClass()
{
delete anotherMyClass;
}
//public members here
private:
MyClass* anotherMyClass;
};
がコンストラクターで割り当てられていないと仮定するとanotherMyClass
、メモリをすぐに使い果たしてしまいます。連結リストのように互いに関連付けられた MyClasses のチェーンがあった場合はどうなるでしょうか? この場合、デストラクタの削除ステートメントは機能しますか? デストラクタが呼び出されると、それぞれanotherMyClass
が再帰的に解放されますか?
あなたが知っているnew
andステートメントに関する特定の奇妙なトリックや警告はありますか?delete