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

fen*_*fen 4 c++ stl smart-pointers unique-ptr c++11

这是一种正确的方法吗?

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

unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());
Run Code Online (Sandbox Code Playgroud)

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

Kon*_*lph 7

除非您想获取内存的所有权(在这种情况下,您应该传递a shared_ptr或a unique_ptr),为什么要使用指针?

通过引用传递.

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

unique_ptr<MyClass> p(new MyClass());
helperFunc(*p);
Run Code Online (Sandbox Code Playgroud)

当你不想获得所有权时使用原始指针在一般情况下是好的,但在这里是不必要的,除非你明确地想要允许nullptrs(在这种情况下,是的,使用原始指针).


bil*_*llz 5

如果helpFunc获取所有权,则传递std :: shared_ptr或std :: unique_ptr,否则只需通过引用传递:

  void helperFunc(MyClass& my_class)
  {
  }
Run Code Online (Sandbox Code Playgroud)

呼叫:

 helperFunc(*p);
Run Code Online (Sandbox Code Playgroud)

  • 这太傻了.如果函数不想取得所有权*为什么heck是所有权*(即unique_ptr)*即使在接口*?采用非拥有引用的方法一直是采用MyClass和/或MyClass*或const变体.*现在没有理由改变*. (5认同)