[英]Smart pointer concepts ownership and lifetime
在使用 C++ 智能指針(唯一、共享、弱)時,有兩個概念(所有權、生命周期)很重要。 我試圖理解這些概念以及它們如何影響智能指針(或原始指針)的使用。
我讀了兩條規則:
一個例子:
class Object
{
public:
Object* child(int i) { return mChildren[i]; }
// More search and access functions returning pointers here
private:
vector<Object*> mChildren;
};
我想使用智能指針重寫它。 讓我們先忽略 child()。 輕松的游戲。 父母擁有其子女。 所以讓 mChildren 成為 unique_ptr 的向量。
根據上述規則,有些人認為 child(i) 應該繼續返回原始指針。
但這不是有風險嗎? 有人可能會做一些愚蠢的事情,例如刪除返回的對象會導致難以調試的崩潰……使用weak_ptr 或shared_ptr 作為返回值可以避免這種情況。
難道不能說復制指針總是意味着暫時共享所有權和/或斷言對象的生命周期嗎?
僅當我也沒有獲得更安全的 API 時,才值得為兒童使用智能指針嗎?
您可以返回一個const std::unique_ptr<Object>&
,這將允許您具有原始指針的相同語義以在防止刪除的同時調用其上的方法。
當您知道所有權將保留任何原始指針並且您確定人們不會嘗試直接delete
指針時,將std::unique_ptr
與原始指針一起使用是有意義的。 所以這與使用std::weak_ptr
和std::shared_ptr
因為它們根本不允許您使用懸空指針。
總是有犯錯的空間,所以答案實際上取決於具體情況,該代碼將在何處使用等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.