这是一种正确的方法吗?
void helperFunc(MyClass *ptr)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());
或者我应该使用shared_ptr进行此类操作?
答案 0 :(得分:7)
除非您想获取内存的所有权(在这种情况下,您应该传递shared_ptr
或unique_ptr
),为什么要使用指针?
通过引用传递。
void helperFunc(MyClass& obj)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(*p);
当你不想获得所有权时使用原始指针一般很好,但这里没有必要,除非你明确地想要允许nullptr
s(在这种情况下,是的,使用原始指针)。
答案 1 :(得分:5)
如果helpFunc获取所有权,则传递std :: shared_ptr或std :: unique_ptr,否则只通过引用传递:
void helperFunc(MyClass& my_class)
{
}
呼叫:
helperFunc(*p);
答案 2 :(得分:4)
当您使用get()
函数时,您会得到一个原始指针,并失去您首先使用unique_ptr
类的分配跟踪。
我会避免使用get()
,除非helperFunc
确实如此微不足道以至于它不占用指针的所有权,并且可以保证不会泄漏它或在某些其他状态下留下悬空引用
如果您真的想将unique_ptr
本身传递给该函数,请查看:How do I pass a unique_ptr argument to a constructor or a function?