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

2021-07-05 02:19:51 字數 1080 閱讀 6751

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