#include#includeusing namespace std;
class mutex;
void lock(mutex*pm)
void unlock(mutex*pm)
class lock
~lock()
private:
mutex *mutexptr;
};//---------------------禁止複製
class uncopyable//允許子類物件構造析構
~uncopyable(){}
private:
uncopyable(const uncopyable&);//阻止
uncopyable&operator=(const uncopyable&);
};class lock1 :private uncopyable
~lock1()
private:
mutex *mutexptr;
};//-----------------引用計數法
class lock2
//不需要析構 mutexprt的析構函式會在互斥器的引用次數為0時自動呼叫shared_ptr的刪除器 (unlock)
private:
shared_ptrmutexptr;
};void test(mutex &m)
int main()//右括號執行完畢自動解鎖 but
lock ml1(&m);
lock ml2(ml1);//出現了兩把鎖
//--------------禁止複製
lock1 m3(&m);
//lock1 m4(m3);用不了了
//-------------引用計數法
lock2 m5(&m);
lock2 m6(m5);*/
test(m);
//複製資源管理物件時 要進行深拷貝
// auto_ptr可以保證 只有乙個raii物件指向乙個未加工資源
system("pause");
return 0;
}
條款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 不過其他行...