>백엔드 개발 >C++ >C 11에서 `std::make_unique`가 누락된 이유는 무엇이며, 구현 시 Perfect Forwarding은 어떻게 작동합니까?

C 11에서 `std::make_unique`가 누락된 이유는 무엇이며, 구현 시 Perfect Forwarding은 어떻게 작동합니까?

DDD
DDD원래의
2024-12-30 00:30:12588검색

Why is `std::make_unique` Missing in C  11, and How Does Perfect Forwarding Work in its Implementation?

Make_unique 및 완벽한 전달

Q: C 11 표준 라이브러리에 중앙 집중식 make_unique 기능이 없는 이유는 무엇입니까?

많은 사람들이 고유 포인터가 불편합니다. 예를 들면 다음과 같습니다.

std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3));

다음과 같은 세련된 기능이 선호됩니다.

auto p = std::make_unique<SomeUserDefinedType>(1, 2, 3);

Q: 여기 make_unique 구현 시도가 있지만 std::forward 관련 내용이 손상된 것 같습니다. 무엇을 하고 있으며 어떻게 사용되나요?

template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}

A: C 11에서 std::make_unique가 누락된 것은 실수로 인정되어 C 14에 추가되었습니다.

std::forward(args) 표현식은 완벽한 전달을 사용하여 ...args 인수에 대한 인위적인 참조를 생성합니다. T(std::forward(args)...)의 새 표현식으로 전달되고 lvalue와 rvalue에 대한 구성 동작을 통합합니다.

위 내용은 C 11에서 `std::make_unique`가 누락된 이유는 무엇이며, 구현 시 Perfect Forwarding은 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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