2013-03-11 52 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

相關問題