传递unique_ptr vs raw_ptr?

时间:2015-03-14 03:34:05

标签: c++ function pointers unique-ptr raw-pointer

您的体验中更常见的是:func1()或funct2()?假设func1和func2最好不要作为Foo类方法。

void func1(unique_ptr<Bar>& bar) { /* alter pointed to object's attributes */ }

void func2(Bar* const bar) { /* alter pointed to object's attributes */ }

class Foo
{
  unique_ptr<Bar> bar;
  void mutate_bar1(){ func1(bar); }
  void mutate_bar2(){ func2(bar.get()); }
}

2 个答案:

答案 0 :(得分:5)

来自GotW #91 Solution: Smart Pointer Parameters

  

指南:除非您想使用或操纵智能指针本身,例如共享或转让所有权,否则不要将智能指针作为函数参数传递。

     

指南:首选按价值*&传递对象,而不是智能指针。


  

像往常一样,如果你需要表达null(没有小部件),请使用*,否则更喜欢使用&;如果对象仅为输入,请写const widget*const widget&

答案 1 :(得分:1)

就个人而言,我会选择mutate_bar2()。您可以通过将指针存储在std::unique_ptr类成员中来正确管理指针的生命周期。所以你不必担心内存泄漏。您可以安全地使用原始指针。我没有看到绕过std::unique_ptr的任何优势,访问可能会稍慢。