내가 이해하는 한, C ++ 14 std::make_unique
는 매개 변수 평가 순서가 지정되지 않아 안전하지 않았기 때문에 도입되었습니다 .
f(std::unique_ptr<MyClass>(new MyClass(param)), g()); // Syntax A
(설명 : 평가가 먼저 원시 포인터에 대한 메모리를 할당 한 다음 호출 g()
하고 std::unique_ptr
생성 전에 예외가 throw 되면 메모리가 누출됩니다.)
호출 std::make_unique
은 호출 순서를 제한하는 방법이므로 안전을 보장합니다.
f(std::make_unique<MyClass>(param), g()); // Syntax B
: 그 이후로, C ++ (17)는 내 질문에, 그래서 여기, 너무 구문의 안전을, 평가 순서를 명확히했다 사용하는 이유가 여전히 존재 std::make_unique
이상 std::unique_ptr
++ 17 C에서의 생성자는? 몇 가지 예를 들어 줄 수 있습니까?
현재 내가 상상할 수있는 유일한 이유는 MyClass
한 번만 입력 할 수 있다는 것입니다 (를 사용하여 다형성에 의존 할 필요가 없다고 가정 std::unique_ptr<Base>(new Derived(param))
). 그러나 그것은 매우 약한 이유처럼 보입니다. 특히 생성자가 std::make_unique
하는 동안 deleter를 지정할 수없는 경우 에는 더욱 그렇습니다 std::unique_ptr
.
그리고 분명히 std::make_unique
말하면 , 나는 표준 라이브러리에서 제거하는 것을지지하는 것이 아니라 (적어도 이전 버전과의 호환성을 위해 타당 함을 유지하는 것이 좋습니다)std::unique_ptr
std::unique_ptr
합니까? 그것은에 대한에 대한 논쟁이 아니다make_unique