2

在您的经验中更常见的是:func1() 还是 func2()?假设 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()); }
}
4

2 回答 2

5

来自GotW #91 解决方案:智能指针参数

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

准则:更喜欢按值、*或传递对象&,而不是通过智能指针。


像往常一样,*如果您需要表示 null(无小部件),请使用 a,否则更喜欢使用 a &; 如果对象是只输入的,写const widget*or const widget&

于 2015-03-14T03:54:49.477 回答
1

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

于 2015-03-14T03:46:48.743 回答