C++箴言:资源管理类的拷贝行为

C++箴言:资源管理类的拷贝行为,第1张

C++箴言:资源管理类的拷贝行为,第2张

在上一篇文章中,介绍了资源管理的支柱资源获取即初始化(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);//锁定互斥体

...//执行临界区操作

} //结束时自动解锁互斥体

//块的

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++箴言:资源管理类的拷贝行为

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情