我可以将 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)
我可以将 unique_ptr 的引用传递给函数吗?
是的,aunique_ptr和其他类一样。
当你想unique_ptr从一个函数中改变一个现有的(例如调用.reset()它)时,你应该这样做。
如果只想访问 里面的对象unique_ptr<T>,就拿T&或const T&在你的函数接口中,这样它们就可以独立于unique_ptr.
根据赫伯·萨特的说法:
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