9

make_sharedのブーストドキュメントには、次のように書かれています。

利便性とスタイルに加えて、このような関数は、オブジェクトとそれに対応する制御ブロックの両方に単一の割り当てを使用でき、shared_ptrの構築オーバーヘッドのかなりの部分を排除できるため、例外安全でかなり高速です。

「シングルアロケーション」の意味がわかりませんが、どういう意味ですか?

4

2 に答える 2

12

「割り当て」とは、アロケータの呼び出しから取得されたメモリのブロックを意味します。

通常、shared_ptrポインタコンストラクタを使用してを作成すると、参照カウントと削除機能を保持する「制御ブロック」にメモリが割り当てられます。そのすべてのコピーはshared_ptr同じ制御ブロックを参照するため、参照カウントを共有します。したがって、合計で2つの割り当てがあります。オブジェクト自体とによって作成された制御ブロックですshared_ptr

オブジェクトを作成し、とshared_ptr一緒に作成するとmake_shared、1つの割り当てのみが行われます。これは、2つのメンバーを持つ単一の構造体と考えることができます。

  1. 管理されているオブジェクト
  2. 制御ブロック。
于 2011-08-12T17:53:01.023 に答える
4

shared_ptr参照カウント用のスペースを割り当てる必要があります。これは、オブジェクトを動的に作成し(1つの割り当て)、それをに渡しshared_ptr、次にカウントを割り当てる(2番目の割り当て)ことを意味します。make_shared十分な大きさの単一の割り当てを実行してから、カウントとオブジェクトの両方を適切に構築します。

于 2011-08-12T17:50:48.970 に答える