>백엔드 개발 >C++ >왜 `std::move` 없이 `std::unique_ptr`을 반환할 수 있나요?

왜 `std::move` 없이 `std::unique_ptr`을 반환할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-15 19:16:10419검색

Why Can I Return a `std::unique_ptr` Without `std::move`?

std::move 없이 std::unique_ptr을 반환하는 것이 허용되는 이유

std::unique_ptr은 복사 구성을 금지하지만 반환 문에는 Unique_ptrs는 제외됩니다. 이 동작은 C 언어 사양, 특히 12.8 §34 및 §35 조항에 부합합니다.

특정 조건이 충족되면 구현에서는 클래스 객체에 대한 복사/이동 생성을 생략할 수 있습니다. 복사 제거라고 하는 이 최적화는 함수 내의 클래스 반환 유형에 대한 반환 문에서 허용됩니다. 예외는 유형이 함수 반환 유형과 일치하는 비휘발성 자동 객체와 관련된 표현식에 적용됩니다.

또한 lvalue 객체에 대해 복사 제거가 발생하면 복사 생성자에 대한 오버로드 해결이 객체가 지정된 것처럼 진행됩니다. rvalue로.

컴파일러 구현

이 예외는 컴파일러 내에서 처리됩니다. 컴파일러는 언어 사양을 활용하여 제거 기술을 인식하고 적용하며 불필요한 작업을 제거하여 코드를 최적화합니다.

Named Value Return

값으로 반환하는 것이 최적의 옵션이라는 점은 주목할 만합니다. 그런 시나리오. 제거하지 않더라도 반환 문의 명명된 값은 rvalue로 처리되어 최소한의 오버헤드가 발생합니다.

위 내용은 왜 `std::move` 없이 `std::unique_ptr`을 반환할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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