関数がshared_ptr
(boost または C++11 STL から) を受け取る場合、それを渡していますか:
const参照による:
void foo(const shared_ptr<T>& p)
または値で:
void foo(shared_ptr<T> p)
?
最初の方法の方が速いと思われるので、その方が好ましいです。しかし、これは本当に価値があるのでしょうか、それとも他に何か問題があるのでしょうか?
あなたの選択の理由、あるいは、もしそうであれば、なぜそれが重要ではないと思うのかを教えてください。
ベストアンサー1
この質問はスコット、アンドレイ、ハーブによって議論され、答えられました。何でも聞いてくださいセッションC++ とその先 20114:34からご覧くださいshared_ptr
パフォーマンスと正確性について。
つまり、オブジェクトの所有権を共有することが目的ではない場合(たとえば、異なるデータ構造間や異なるスレッド間) 、値を渡す理由はありません。
ただし、上記のリンク先の講演ビデオで Scott Meyers が説明しているように、移動最適化を行うことはできませんが、これは実際に使用できる C++ のバージョンに関連しています。
この議論の大きな更新は、ネイティブになる 2012会議のインタラクティブパネル: 何でも聞いてください!これは特に見る価値がある22:50。