3

2 つのクラス A と B があるとします。クラス B が A を使用できる方法は 2 つあります。

初め:

class B
{
  A *a;
}

2番:

class B
{
  A a;
}

ほとんどの C++ ライブラリFirstSecond. 2番目のアプローチを使用することの欠点は何ですか。スタックとヒープの割り当てに関連していますか? どうか明らかにしてください。

4

1 に答える 1

7

インスタンスを所有する利点 ( class B { A a; };):

  • aの作成と破棄は自動的に行われるため、心配する必要はありません。
  • aダングリングまたはヌル ポインターである可能性があることを心配する必要はありません。
  • メモリの局所性:aのインスタンスが存在する場所に存在しますB。の大きな配列があり、それぞれに順番にBアクセスする場合、これは速度に大きな違いをもたらす可能性があります。BA
  • メモリ効率: ポインタ用のストレージは必要ありません。

大規模な一般化を行うには、このアプローチの方が高速安全であると言えます。

ポインタ ( class B { A *a; };):

  • ポリモーフィズム:a実際には のサブクラスを指すことができAます。
  • aのインスタンスをコピーする必要なく再割り当てできますA
  • a別のオブジェクトから独立しBて存在することも、別のオブジェクトによって完全に所有されることさえあります。
  • anull にすることができ、常に必要でない場合はメモリを解放します。

別の大規模な一般化を行うために、このアプローチはより柔軟であると言えます。

于 2013-08-08T18:42:55.933 に答える