적절한 방법입니까?std :: unique_ptr을 도우미 함수에 전달
void helperFunc(MyClass *ptr)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());
또는 이러한 작업에 대해 shared_ptr을 사용해야합니까? helpFunc가 소유권을 경우
적절한 방법입니까?std :: unique_ptr을 도우미 함수에 전달
void helperFunc(MyClass *ptr)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());
또는 이러한 작업에 대해 shared_ptr을 사용해야합니까? helpFunc가 소유권을 경우
당신은 표준 : : shared_ptr의 또는 표준을 통과 :: unique_ptr 그렇지 않으면 단지 참조로 전달합니다
void helperFunc(MyClass& my_class)
{
}
전화 :
helperFunc(*p);
당신이 get()
기능을 사용하면 원시 포인터를 가져 와서 unique_ptr
클래스를 사용하는 할당 추적을 잃게됩니다. 이 실제로 포인터의 소유권을 가져 가지 않고 일부 누락 된 참조를 남기거나 다른 상태로 남겨 둘 수 없다면 나는 get()
을 사용하지 않는 것이 좋습니다.
당신이 정말로 함수에 unique_ptr
자체를 전달하는 의미 경우, 한 번 봐 걸릴 : 당신은 메모리의 소유권을 가져올하지 않는 한 How do I pass a unique_ptr argument to a constructor or a function?
을 (이 경우 당신은 통과해야 중 하나 shared_ptr
또는 unique_ptr
) 왜 포인터로 작업하는거야?
참조로 전달하십시오. 당신은 당신이 명시 적으로 nullptr
들 (이 경우, 예, 원시 포인터를 사용) 허용하지 않으려면, 소유권이 여기에 일반적으로 잘하지만 불필요한 것을 원하지 않는 경우 원시 포인터를 사용
void helperFunc(MyClass& obj)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(*p);
.
이것은 바보입니다. 함수가 소유권을 가져 오지 않으려는 경우 * 인터페이스에서도 * 소유권 * (즉 unique_ptr) * 인 이유는 무엇입니까? 소유하지 않는 참조를 가져 오는 방법은 항상 MyClass & or MyClass * 또는 const 변형을 사용하는 것입니다. * 지금 변경할 이유가 없습니다. –
Seconded. 원시 포인터를 전달할 때 아무 문제가 없습니다. – Puppy
원시 포인터를 사용할 수있는 유일한 문제는 스마트 포인터를 지원하는 libs와 일관되게 사용하는 libs와 이들을 사용하지 않는 라이브러리 (이전 표준을 대상으로하기 때문에)를 혼합 한 응용 프로그램을 사용하여 작업하는 경우입니다. 이 경우 소유권을 가져갈 수도 있고 가지지 않을 수도있는 비슷한 원시 포인터 함수를 사용하게 될 것입니다. [unique_ptr 사용법] (http://wp.me/p2Bia3-2U)에 대한 내 블로그 게시물보기 – TiMoch