我可以将 unique_ptr 的引用传递给函数吗?

Nuj*_*fas 4 c++

我可以将 unique_ptr 的引用传递给函数吗?如果不是,我为什么要避免它?

前任:

void func(unique_ptr<Clss>& ref);

main() {
   unique_ptr<Clss> a = std::make_unique<Clss>();
   fn(a);
}
Run Code Online (Sandbox Code Playgroud)

Vit*_*meo 6

我可以将 unique_ptr 的引用传递给函数吗?

是的,aunique_ptr和其他类一样。

当你想unique_ptr从一个函数中改变一个现有的(例如调用.reset()它)时,你应该这样做。

如果只想访问 里面的对象unique_ptr<T>,就拿T&const T&在你的函数接口中,这样它们就可以独立于unique_ptr.


Nuj*_*fas 6

根据赫伯·萨特的说法:

https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/

通过引用传递 unique_ptr 用于输入/输出 unique_ptr 参数。

void f( unique_ptr<widget>& ); // (d)
Run Code Online (Sandbox Code Playgroud)

unique_ptr仅当函数应该实际接受现有对象unique_ptr并可能修改它以引用不同的对象时,才应使用它来接受 in/out 。仅接受小部件是一种不好的方法,因为它仅限于调用者中的特定生命周期策略

谢谢@sgvd