>  기사  >  백엔드 개발  >  `shared_ptr`을 값으로 전달해야 합니까, 아니면 참조로 전달해야 합니까?

`shared_ptr`을 값으로 전달해야 합니까, 아니면 참조로 전달해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-31 14:24:02109검색

Should I Pass `shared_ptr` by Value or by Reference?

공유 포인터 전달: 참조 또는 값으로

shared_ptr(부스트 또는 C 11 STL에서)을 함수에 전달할 때, const 참조(void foo(const shared_ptr& p)) 또는 값(void foo(shared_ptr p))으로 전달하는 것 중에서 선택하는 것이 논쟁의 주제였습니다.

전통적으로는 불필요한 복사 작업을 피하기 때문에 참조로 전달하는 것이 더 빠를 것이라고 믿었습니다. 그러나 C and Beyond 2011의 전문가(Scott, Andrei, Herb)가 논의한 것처럼 더 이상 그렇지 않습니다.

값으로 전달해야 할까요, 아니면 참조로 전달해야 할까요?

객체의 소유권을 명시적으로 공유해야 하는 경우가 아니면(예: 데이터 구조 또는 스레드 간), 값으로 shared_ptr을 전달해야 할 강력한 이유가 없습니다. const 참조를 전달하는 것은 다음과 같은 이유로 선호됩니다.

  • 성능: 일반적으로 const 참조를 전달하는 것이 shared_ptr을 값으로 복사하는 것보다 빠릅니다. 특히 대형 객체의 경우 더욱 그렇습니다. 이는 전체 객체가 아닌 포인터 자체만 전달되기 때문입니다.
  • 정확성: const 참조로 전달하면 함수 내에서 shared_ptr을 수정할 수 없습니다. 이는 공유 객체가 실수로 변경되는 것을 방지하는 데 도움이 됩니다.

값으로 전달해야 하는 경우

shared_ptr을 값으로 전달하는 것이 권장되는 유일한 경우는 다음과 같습니다. 목적은 객체의 소유권을 함수로 이전하는 것입니다. 이는 일반적으로 함수가 객체의 수명 관리를 책임져야 하는 경우입니다.

추가 고려 사항

최적의 성능을 위해서는 shared_ptr이 이동에 최적화될 수 있습니다. Scott Meyers가 설명했듯이 이동 최적화를 사용하면 불필요한 복사 작업이 필요하지 않게 됩니다. 그러나 이 최적화는 특정 버전의 C에서만 사용할 수 있습니다.

위 내용은 `shared_ptr`을 값으로 전달해야 합니까, 아니면 참조로 전달해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.