メイン関数では、new を使用してオブジェクトを作成し、それを削除しません。プロセスが終了すると、ヒープ領域がクリアされることを願っています。以下は、クラス A のオブジェクトがクラス B のメンバー変数であるサンプル コードです。クラス Bメンバー変数として multimap も持っています。
Class A
{
Public:
A(); //have definition in cpp file
~A();//have definition in cpp file
Private:
Int a;
};
Class B{
Private:
Std::multimap<string,string> map_test;
Public:
A a;
B(); //have definition inn cpp file
~B();//does not have any definition in cpp file
};
int main()
{
B *b = new B();
/* code section where it fills some 1000 key value pairs in the multimap
for some purpose */
return 0;
}
私の理解:
- ここでオブジェクトを削除しなくても、プロセスが終了するとヒープスペースが消去されるため、問題は発生しません。プログラムのスコープは上記のように制限されており、他の誰もこれを再利用することはありません。削除を使用しないのは良いことですか、悪いことですか? これについてあなたの提案は何ですか?
- オブジェクトのデフォルトのデストラクタを呼び出す必要があり、それが暗黙のマルチマップ デストラクタを呼び出します。したがって、マルチマップを明示的にクリアする必要はありません。間違っている場合は修正してください。
- 親クラスではデストラクタを宣言するだけで定義はありません。では、暗黙のデストラクタを呼び出すのか、それとも無視するのか? (定義しない理由はありません。理解を深めてください。)
- 親クラスの場合、暗黙のデストラクタを呼び出す場合、ここで定義されている子クラスのデストラクタを呼び出す必要がありますか?
- 親クラス オブジェクトは new を使用してインスタンス化されるため、ヒープ内に作成されます。次に、この親オブジェクトのメンバー変数が格納される正確な場所です。たとえば、オブジェクト "a" はメンバー変数であり、このメンバーの宣言を調べます。オブジェクト、スタックで作成されるようです。ここで、親オブジェクトとそのメンバーである子オブジェクトの正確なメモリ作成がどのように行われるかについて混乱しています。これを理解するのを手伝ってもらえますか?