C ++ 11부터는 생각보다 const & 보다 자주 값 을 사용해야합니다 .
기본 유형 T가 아닌 std :: shared_ptr을 사용하는 경우 무언가를 수행하려고하기 때문에 그렇게합니다.
당신이 원하는 경우 복사 할 곳,이 사본을 가지고 가고, 표준 : : 오히려 const를하여 복용 및 다음 나중에 복사하는 것보다, 내부 이동에 더 많은 의미가 있습니다. 함수를 호출 할 때 호출자에게 옵션 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 매개 변수는 실제 솔루션으로 "일부 별칭shared_ptr
을 지정하고 변경하지 않겠다고 약속합니다."(