C++箴言:资源管理类的拷贝行为
在上一篇文章中,介绍了资源管理的支柱资源获取即初始化(RAII)的原理,并描述了auto_ptr和tr1::shared_ptr将该原理应用于基于堆的资源的性能。并非所有的资源都是基于堆的,然而,对于这样的资源,像auto_ptr和tr1::shared_ptr这样的智能指针通常不像资源处理程序那样合适。在这种情况下,有时,您可能希望根据自己的需要创建自己的资源管理类。
例如,假设您使用C API提供的锁定和解锁函数来操作互斥类型互斥对象:
void lock(互斥* pm);//锁定pm指向的互斥体
void解锁(互斥* pm);//解锁互斥体
为了确保您永远不会忘记解锁已经锁定的互斥体,您需要创建一个类来管理锁。RAII原则规定了这样一个类的基本结构,它通过构造函数获取资源,通过析构函数释放资源:
类别锁{
公共:
显式锁(互斥*pm)
:mutexPtr(pm)
{ lock(mutexPtr);} //获取资源
~ Lock(){ unlock(mutexPtr);} //释放资源
私人:
Mutex * mutexPtr
};
根据RAII风格的习惯使用锁:
互斥m;//定义需要使用的互斥体
...
{ //创建块来定义临界区
锁定ml(& m);//锁定互斥体
...//执行临界区操作
} //结束时自动解锁互斥体
//块的
位律师回复
0条评论