1. ホーム
  2. c++

[解決済み】shared_ptrは参照で渡すべきか、値で渡すべきか?

2022-03-27 20:40:54

質問

ある関数が shared_ptr (boost または C++11 STL から) を渡しているか。

  • const参照で。 void foo(const shared_ptr<T>& p)

  • または値によって void foo(shared_ptr<T> p) ?

私は、最初の方法の方が早いのではないかと思っています。しかし、これは本当に価値があるのでしょうか、それとも何か追加の問題があるのでしょうか?

選択した理由、または場合によっては関係ないと思う理由を教えてください。

解決方法は?

この質問に対する回答は、Scott、Andrei、Herbによって以下のように行われました。 何でも聞いてください でのセッションです。 C++とその後2011 . 4:34からご覧ください。 について shared_ptr パフォーマンスと正しさ .

短く オブジェクトの所有権を共有することが目的でない限り、値で渡す理由はありません。 (例:異なるデータ構造間、異なるスレッド間)。

リンク先の講演ビデオでScott Meyersが説明しているように、移動最適化できるのであれば別ですが、これは実際に使用できるC++のバージョンに関係しています。

この議論の大きなアップデートは、以下の期間に行われました。 GoingNative 2012 カンファレンスの インタラクティブなパネル。何でも聞いてください から、特に見応えがあります。 22:50 .