1

重複の可能性:
参照によってshared_ptrを渡す必要がありますか?
スマートポインタを引数として渡す

値または定数参照で渡す必要がありますか?コピー構成可能オブジェクトを値で渡すか、定数参照で渡すかについて、多くの経験則を読みました。そのような:

  1. 定数参照によってオブジェクトを渡し、値によって組み込み型を渡します(関数オブジェクトを除く)
  2. オブジェクト(動的メモリを含む)のサイズが2*doubleのサイズ未満でない限り値を渡します。

これらのルールがどのように適用されるか説明していただけます std::shared_ptr<Resource>か?オブジェクトはおそらく非常に小さく、おそらくポインタと参照カウンタであると理解していますが、それでもオブジェクトです。ここでのベストプラクティスは何ですか?

4

1 に答える 1

0

おそらく(パフォーマンスに関して)最も重要な懸念は、std::shared_ptr<...>(値を渡すときに発生するなど)のコピーを作成するには、参照カウントのインターロックされた増分が必要になることです。または、実装によっては、クリティカルセクションのような他の形式の同期もあります。このようなコストは、マルチスレッドプログラムではかなりの額になる可能性があります。

参照による受け渡しがより良い選択であることはほぼ確実です。主な欠点(またはこれはboost::shared_ptr<...>?のみ)は、標準のスレッドセーフ保証のみを提供することです。すべてのアクセスがconstメソッドのみである場合を除きshared_ptr<...>、単一へのアクセスは(たとえば、ミューテックスによって)保護する必要があります。shared_ptr<...>マルチスレッドの状況では、const参照をshared_ptr<...>sに渡すと、適切な同期を確保することがより困難になる場合があります。

シングルスレッドプログラムでは、おそらく大きな違いはありません。

于 2012-07-12T06:17:04.293 に答える