将std :: unique_ptr传递给辅助函数

时间:2013-02-01 10:33:08

标签: c++ c++11 stl smart-pointers unique-ptr

这是一种正确的方法吗?

void helperFunc(MyClass *ptr)
{
    // do something with ptr,
}

unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());

或者我应该使用shared_ptr进行此类操作?

3 个答案:

答案 0 :(得分:7)

除非您想获取内存的所有权(在这种情况下,您应该传递shared_ptrunique_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?