條款14 在資源管理類中小心copying行為

2021-09-12 10:41:49 字數 541 閱讀 2544

raii物件被複製時的幾種選擇:(前兩種最常用)

禁止複製

class a:private uncopyable;
引用計數,複製時將資源的「被引用數」遞增。raiiclass包含乙個shared_ptr成員變數即可。shared_ptr可以定製刪除器,即當引用為0時觸發。

class lock

//不必宣告析構函式,

//析構函式,不論是編譯器生成的還是使用者自定的

//都會自動呼叫其non-static成員變數的析構函式。

//mtexptr會在引用計數為0時自動呼叫unlock

private:

shared_ptrmutexptr;//使用shared_ptr替換raw pointer

};

深度複製

轉移底部資源的所有權

希望確保永遠只有乙個raii物件指向原始資源,即使raii物件被複製依然如此。auto_ptr.

預設copying函式可能不會滿足要求,你得自己編寫它們。

條款14 在資源管理類中小心copying行為

結論1 複製raii物件必須一併複製它所管理的資源,所以資源的copying行為決定raii物件的copying行為。結論2 普遍而常見的raii class copying行為是 1 抑制copying,即禁止複製 很多時候允許raii物件被複製是不合理的。2 對底層資源施行引用計數法 在此情況下...

條款14 在資源管理類中小心copying行為

總結 條款13介紹了作為資源管理類支柱的 resource acquisition isinitialization raii 原則,並描述了 auto ptr 和 tr1 shared ptr 在基於堆的資源上運用這一原則的表現。然而,並非所有的資源都是基於堆的,對於這樣的資源,像 auto pt...

條款14 在資源管理類中小心copying行為

條款14 在資源管理類中小心copy行為 1.複製raii物件必須一併複製它所管理的資源,所以資源的copying行為決定raii物件的copying行為。2.普遍而常見的raii class copying行為是 抑制copying 施行引用計數法 reference counting 不過其他行...