您的体验中更常见的是: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()); }
}
答案 0 :(得分:5)
来自GotW #91 Solution: Smart Pointer Parameters:
指南:除非您想使用或操纵智能指针本身,例如共享或转让所有权,否则不要将智能指针作为函数参数传递。
指南:首选按价值
*
或&
传递对象,而不是智能指针。
像往常一样,如果你需要表达null(没有小部件),请使用
*
,否则更喜欢使用&
;如果对象仅为输入,请写const widget*
或const widget&
。
答案 1 :(得分:1)
就个人而言,我会选择mutate_bar2()
。您可以通过将指针存储在std::unique_ptr
类成员中来正确管理指针的生命周期。所以你不必担心内存泄漏。您可以安全地使用原始指针。我没有看到绕过std::unique_ptr
的任何优势,访问可能会稍慢。