2014-10-30 160 views
0

我經常在一些內部表中使用以下原始元素。found/not found found with shared_ptr指示

X const * find(Key const & key);

如果找不到返回指向找到的元素的指針,則返回null。

我想用shared_ptr而不是裸指針來做類似的事情。

+0

只是一個建議的話:你可能想要返回一個weak_ptr,而是使用shared_ptr在數據結構內部。 – RJinman 2014-10-30 03:23:45

+0

或者您可以在內部使用unique_ptr並在容器預期擁有其內容的唯一所有權時返回引用。 – RJinman 2014-10-30 03:30:38

+0

@Rob Jinman。我期望返回的引用可以保存在其他對象中,因此我對shared_ptr感興趣。我期望內部表將基於shared_ptr,所以將它作爲搜索結果傳遞出去將是最便宜的選擇。這個接口的恕我直譯用戶應該決定使用weak_ptr還是shared_ptr來實現其內部目的。 – zzz777 2014-10-30 16:11:15

回答

3

沒問題,它或多或少都以相同的方式工作。 shared_ptr有一個默認構造函數,它會生成一個「null」指針,並且它還有一個運算符,它允許您在布爾上下文中評估shared_ptr,如if conndition。所以,當你什麼都沒有返回,只說:

return shared_ptr<X>(); 

,並測試它:

if (shared_ptr<X> ptr = myFunc()) { 
    // do something with *ptr 
} 
0

我不知道爲什麼你堅持要返回shared_ptr的? shared_ptr是管理內存的工具。你可以在你的功能中使用這些。然而,無論你是否返回一個shared_ptr,reference/raw-pointer,它都不會影響你函數的調用者(在異步的上下文中,有很多陷阱)。

此外,shared_ptr的基礎是引用計數機制,即只有當它不再被任何人引用時才被刪除。所以,如果你要返回它,你必須確保你沒有永久存儲它,它永遠不會使它的引用計數達到0.