2 つのクラス A と B があるとします。クラス B が A を使用できる方法は 2 つあります。
初め:
class B
{
A *a;
}
2番:
class B
{
A a;
}
ほとんどの C++ ライブラリFirstがSecond. 2番目のアプローチを使用することの欠点は何ですか。スタックとヒープの割り当てに関連していますか? どうか明らかにしてください。
インスタンスを所有する利点 ( class B { A a; };):
aの作成と破棄は自動的に行われるため、心配する必要はありません。aダングリングまたはヌル ポインターである可能性があることを心配する必要はありません。aのインスタンスが存在する場所に存在しますB。の大きな配列があり、それぞれに順番にBアクセスする場合、これは速度に大きな違いをもたらす可能性があります。BA大規模な一般化を行うには、このアプローチの方が高速で安全であると言えます。
ポインタ ( class B { A *a; };):
a実際には のサブクラスを指すことができAます。aのインスタンスをコピーする必要なく再割り当てできますA。a別のオブジェクトから独立しBて存在することも、別のオブジェクトによって完全に所有されることさえあります。anull にすることができ、常に必要でない場合はメモリを解放します。別の大規模な一般化を行うために、このアプローチはより柔軟であると言えます。