将unique_ptr的引用传递给函数是不是很糟糕?
void Foo(std::unique_ptr<T>& rT)
{
...
}
答案 0 :(得分:5)
void Foo(std::unique_ptr<T>& rT)
意味着两件事:
你不能这样调用这个函数:Foo(std::unique_ptr<T>(new T));
因为它是一个非const左值引用。这限制了你的功能只接受左值。
如果你传递左值,你不知道它会发生什么:Foo(myunique_ptr);
。在这样的通话中,您不知道Foo
是否声明std::unique_ptr
的所有权。如果调用者不知道Foo
内部发生了什么,并且函数签名中肯定不清楚,这可能会很危险。
现在考虑到上述因素后,您可以决定是否使用不良。