C ++ 11以降では、あなたが考えているよりも頻繁にconst&よりも値でそれをとるべきです。
std :: shared_ptr(基礎となる型Tではなく)を使用している場合は、それを使用して何かを実行したいため、そうしています。
コピーしたい場合どこか、const&で取得して後でコピーするのではなく、コピーで取得してstd :: moveを内部で移動する方が理にかなっています。これは、関数を呼び出すときに呼び出し側にstd :: move shared_ptrを順に移動するオプションを許可し、インクリメントおよびデクリメント操作のセットを節約できるためです。か否か。つまり、関数の呼び出し元は、関数の呼び出し後にstd :: shared_ptrが必要かどうか、および移動するかどうかに応じて決定できます。これは、const&で渡す場合は達成できません。そのため、値で取得することをお勧めします。
もちろん、呼び出し元の両方が長い間shared_ptrを必要とし(したがって、std :: moveできない)、関数内にプレーンコピーを作成したくない場合(弱いポインターが必要な場合、または場合によっては必要な場合のみ)いくつかの条件に応じてそれをコピーするには)、const&の方が望ましい場合があります
たとえば、あなたはすべきです
void enqueue(std::shared<T> t) m_internal_queue.enqueue(std::move(t));
以上
void enqueue(std::shared<T> const& t) m_internal_queue.enqueue(t);
この場合、常に内部でコピーを作成するため
shared_ptr
を設定します。必要に応じて変更できます。」と叫びますが、値バージョンは「コピーしますshared_ptr
ので、変更できる間はわかりません。 )const-referenceパラメーターが実際のソリューションであり、「someにエイリアスを設定しshared_ptr
、変更しないことを約束します」(値によるセマンティクスと非常によく似ています!)