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 不過其他行...