shared_ptr は参照渡しと値渡しのどちらが良いでしょうか? 質問する

shared_ptr は参照渡しと値渡しのどちらが良いでしょうか? 質問する

関数が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

おすすめ記事