> 백엔드 개발 > C++ > `std::make_unique`는 C에서 어떻게 완벽한 전달을 달성합니까?

`std::make_unique`는 C에서 어떻게 완벽한 전달을 달성합니까?

Patricia Arquette
풀어 주다: 2024-12-26 02:40:09
원래의
319명이 탐색했습니다.

How Does `std::make_unique` Achieve Perfect Forwarding in C  ?

make_unique 및 완벽한 전달

C 11에는 고유 포인터의 간결한 인스턴스화를 허용하는 내장 std::make_unique 함수가 없습니다. 개발자들은 구문

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));
로그인 후 복사

이 불필요하게 장황하다는 점을 발견하고 대체 구문을 제안했습니다.

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);
로그인 후 복사

이 접근 방식은 고유 포인터 생성을 단순화하고 코드 중복을 줄입니다.

제안된 std::make_unique 구현은 std::forward를 통한 완벽한 전달을 사용하여 인수를 생성자에 전달합니다. 완벽한 전달은 원래 유형과 값 범주(예: lvalues, rvalues)를 유지하면서 함수 매개변수가 가장 효율적인 방식으로 전달되도록 보장합니다.

make_unique 구현에서 구문

std::forward<Args>(args)...
로그인 후 복사

다음과 같이 해석될 수 있다. 다음은 다음과 같습니다.

  • std::forward: Args의 값 범주(예: lvalue 또는 rvalue)를 추론하는 유형 특성입니다.
  • args...: 가변 인수를 개별 매개변수로 변환합니다.

함께 사용하면 다음을 보장하여 완벽한 전달을 달성할 수 있습니다. 인수는 올바른 값 범주 및 유형을 사용하여 생성자에 전달됩니다.

C 표준화 위원회 의장인 Herb Sutter는 C 11에 std::make_unique를 포함하지 않은 것에 대한 감독을 인정하고 이를 포함하지 않을 것이라고 밝혔습니다. 향후 버전에 추가될 예정입니다. 제안된 구현은 질문에 제공된 것과 동일합니다.

C 14가 도입되면서 std::make_unique가 표준화되어 고유 포인터 생성을 위해 요청된 간결한 구문을 제공합니다.

위 내용은 `std::make_unique`는 C에서 어떻게 완벽한 전달을 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿