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)...
다음과 같이 해석될 수 있다. 다음은 다음과 같습니다.
함께 사용하면 다음을 보장하여 완벽한 전달을 달성할 수 있습니다. 인수는 올바른 값 범주 및 유형을 사용하여 생성자에 전달됩니다.
C 표준화 위원회 의장인 Herb Sutter는 C 11에 std::make_unique를 포함하지 않은 것에 대한 감독을 인정하고 이를 포함하지 않을 것이라고 밝혔습니다. 향후 버전에 추가될 예정입니다. 제안된 구현은 질문에 제공된 것과 동일합니다.
C 14가 도입되면서 std::make_unique가 표준화되어 고유 포인터 생성을 위해 요청된 간결한 구문을 제공합니다.
위 내용은 `std::make_unique`는 C에서 어떻게 완벽한 전달을 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!