条款14:在资源管理类中小心copying行为像上一条款说的,有的时候auto_ptr不适合资源管理类,我们需要自己创建资源管理类。
[cpp]
void lock(Mutex* pm);//锁定pm所指的互斥器
void unlock(Mutex* pm);//将互斥器接触锁定
class Lock
{
public:
explicit Lock(Mutex* pm):mutexPtr(pm)
{
lock(mutexPtr);//获得资源
}
~Lock()
{
unlock(mutexPtr);//释放资源
}
private:
Mutex *mutexPtr;
};
如上,我们将会为Mutex自动释放资源,但是我们需要考虑的一个问题就是,如果Lock发生了复制,会发生什么?
Lock m1(&m);//锁定
Lock m2(m1);//复制
导致的恶果就是 将会对同一个资源释放两次。