소유권을 이전한다는 의미의 힙 할당 객체를 반환합니다. 나는 (그렇지 않으면 이미 사용할 수있는 경우 직접 작성) 당신이
std::unique_ptr<Y> func(param)
{
return std::unique_ptr<Y>(new Y(param));
}
더 나은이 표준 : make_unique을 사용하는 것입니다 반환 형식으로 std::unique_ptr
을 사용하는 것이 좋습니다 또는 것 - 표준 : make_shared - 당신이 shared_ptr을 사용하는 경우. 예외적 인 안전과 shared_ptr의 경우에 더 효율적입니다.
std::unique_ptr<Y> func(param)
{
return make_unique<Y>(param);
}
std::shared_ptr<Y> func(param)
{
return std::shared_ptr<Y>(param);
}
그리고 func
매개 변수가 복사되었습니다. 이를 피하기 위해 전달을 사용하고자 할 수 있습니다.
template<class T, class U>
std::unique_ptr<T> make_unique1(U&& u)
{
return std::unique_ptr<T>(new T(std::forward<U>(u)));
}
template<class T, class... U>
std::unique_ptr<T> make_unique(U&&... u)
{
return std::unique_ptr<T>(new T(std::forward<U>(u)...));
}
로컬 객체를 반환하지 않으면 사본을 반환합니다. 또한'std :: shared_ptr'입니다. 'std :: make_shared'를 사용하십시오. – user657267
'share_ptr'을'shared_ptr'으로 바꾸면 작동 할 것입니다. –
어느 경우에도 로컬 객체를 반환하지 않습니다. 두 경우 모두 반환 값은 * copied *입니다. 처음에는 포인터가 복사이고, 두 번째에서는 포인터가 복사됩니다. 또한 관련이 없을 수도 있지만,'std :: shared_ptr'와'std :: unique_ptr'을 * pointer *로 보지 말고, 대신에 * 소유권 * 관점에서 살펴 봐야합니다. –