我經常在一些內部表中使用以下原始元素。found/not found found with shared_ptr指示
X const * find(Key const & key);
如果找不到返回指向找到的元素的指針,則返回null。
我想用shared_ptr而不是裸指針來做類似的事情。
我經常在一些內部表中使用以下原始元素。found/not found found with shared_ptr指示
X const * find(Key const & key);
如果找不到返回指向找到的元素的指針,則返回null。
我想用shared_ptr而不是裸指針來做類似的事情。
沒問題,它或多或少都以相同的方式工作。 shared_ptr
有一個默認構造函數,它會生成一個「null」指針,並且它還有一個運算符,它允許您在布爾上下文中評估shared_ptr
,如if
conndition。所以,當你什麼都沒有返回,只說:
return shared_ptr<X>();
,並測試它:
if (shared_ptr<X> ptr = myFunc()) {
// do something with *ptr
}
我不知道爲什麼你堅持要返回shared_ptr的? shared_ptr是管理內存的工具。你可以在你的功能中使用這些。然而,無論你是否返回一個shared_ptr,reference/raw-pointer,它都不會影響你函數的調用者(在異步的上下文中,有很多陷阱)。
此外,shared_ptr的基礎是引用計數機制,即只有當它不再被任何人引用時才被刪除。所以,如果你要返回它,你必須確保你沒有永久存儲它,它永遠不會使它的引用計數達到0.
只是一個建議的話:你可能想要返回一個weak_ptr,而是使用shared_ptr在數據結構內部。 – RJinman 2014-10-30 03:23:45
或者您可以在內部使用unique_ptr並在容器預期擁有其內容的唯一所有權時返回引用。 – RJinman 2014-10-30 03:30:38
@Rob Jinman。我期望返回的引用可以保存在其他對象中,因此我對shared_ptr感興趣。我期望內部表將基於shared_ptr,所以將它作爲搜索結果傳遞出去將是最便宜的選擇。這個接口的恕我直譯用戶應該決定使用weak_ptr還是shared_ptr來實現其內部目的。 – zzz777 2014-10-30 16:11:15