effective c++ 条款十四解读

来源:互联网 发布:怎么查淘宝授权书 编辑:程序博客网 时间:2024/05/22 07:08

以资源管理对象的时候小心copying行为。

上一节我们讲了以资源来管理函数,显然如果有一个互斥器,我们很容易写出这样的代码。

class Lock{public:     Lock(Mutex* p):PMutex(p)     {         lock(pMutex);     }     ~Lock()     {         unlock(pMutex);     }private:    Mutex* pMutex;}
但是显然当我们的类被复制的时候,这种做法就是有问题的:

Mutex mLock m1(&m);Lock m2(&m1);
解决copy问题的两种手段:

1.禁止copy行为

2.采用reference counting的手法 也就是引用计数。通常在类里面内含一个shared_ptr 并定制shared_ptr的回调函数.

具体的做法见一下两段代码:

class Lock:private uncopyable{    ...}
 

class Lock{public:     Lock(Mutex* p):pMutex(p,unlock)     {         lock(pMutex.get());     }private:    shared_ptr<Mutex> pMutex;}