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
アクセスする場合、これは速度に大きな違いをもたらす可能性があります。B
A
大規模な一般化を行うには、このアプローチの方が高速で安全であると言えます。
ポインタ ( class B { A *a; };)
:
a
実際には のサブクラスを指すことができA
ます。a
のインスタンスをコピーする必要なく再割り当てできますA
。a
別のオブジェクトから独立しB
て存在することも、別のオブジェクトによって完全に所有されることさえあります。a
null にすることができ、常に必要でない場合はメモリを解放します。別の大規模な一般化を行うために、このアプローチはより柔軟であると言えます。