2013-03-11 89 views
0

将unique_ptr的引用传递给函数是一个不好的用法吗?引用unique_ptr是一个糟糕的用法吗?

void Foo(std::unique_ptr<T>& rT) 
{ 
    ... 
} 
+1

检查了这个http://stackoverflow.com/questions/9699333/passing-unique-ptr-to-functions – SRJ 2013-03-11 03:47:14

+1

完全没有上下文?是的,这很糟糕。唯一的指针只应该暴露给那些关心被管理对象所有权的人,这在你的代码中很少出现。 – 2013-03-11 03:47:34

+0

更好地解释你实际上在做什么,详细地询问你是否使用了一种好的方法。 – Nemo 2013-03-11 03:48:53

回答

5

void Foo(std::unique_ptr<T>& rT)意味着两两件事:

不能调用函数是这样的:Foo(std::unique_ptr<T>(new T));,因为它是一个非const左值参考。这限制了你的函数只接受左值。

如果你通过一个左值,你不知道它会发生什么:Foo(myunique_ptr);。在这样的通话中,您不知道Foo是否拥有std::unique_ptr的所有权。如果主叫方不知道Foo内部发生了什么,并且从功能签名中确定不清楚,则这可能很危险。

现在考虑到上述因素后,您可以决定是否使用不良。

+1

最后一句话+1。我必须记住这一点。好的 – 2013-03-11 04:25:44