C++ 之 RAII
2013-06-10 23:10
225 查看
--一下很多东西是看书和来自网络学习后的总结:
简单而实用的东西,自己用了好多次了,也不知道原来是它 RAII --- Resource Acquire Is Initial
起源来自C++创始人Bjarne Stroustrup的思想,主要解决的是资源的管理(主要是释放问题),C++相比较java这类语言,在资源释放上,更多的是需要程序员手动处理。
所以,利用对象的生命周期(栈上的对象),在对象生命周期的开始和结束来管理资源(任何资源,可以是连接,可以是一块内存),对象的创建 创建(初始化)和 对象的消亡(释放资源);
很多时候我也习惯把栈上的对象叫做代理,它只是个管理具体资源的中介,如下例子,AutoLock类实例 只是 临界区 这个系统资源的一个代理,真正需要管理的资源是临界区。
class AutoLock
{
public:
AutoLock( )
{
Init***(mCriticalSection) //初始化临界区
}
~AutoLock( )
{
Delete**(mCriticalSection) //删除临界区
}
void Lock( )
{
Enter**( ) //进入临界区
}
void Unlock( )
{
Leave***() //推出临界区
}
CRITICAL_SECTION mCriticalSection;
};
如果存在一个对象AutoLock myLock 在其生命周期的范围内,自然会负责管理和消亡对因的临界区资源。
一定程度上 解决了资源管理的一些麻烦。
简单而实用的东西,自己用了好多次了,也不知道原来是它 RAII --- Resource Acquire Is Initial
起源来自C++创始人Bjarne Stroustrup的思想,主要解决的是资源的管理(主要是释放问题),C++相比较java这类语言,在资源释放上,更多的是需要程序员手动处理。
所以,利用对象的生命周期(栈上的对象),在对象生命周期的开始和结束来管理资源(任何资源,可以是连接,可以是一块内存),对象的创建 创建(初始化)和 对象的消亡(释放资源);
很多时候我也习惯把栈上的对象叫做代理,它只是个管理具体资源的中介,如下例子,AutoLock类实例 只是 临界区 这个系统资源的一个代理,真正需要管理的资源是临界区。
class AutoLock
{
public:
AutoLock( )
{
Init***(mCriticalSection) //初始化临界区
}
~AutoLock( )
{
Delete**(mCriticalSection) //删除临界区
}
void Lock( )
{
Enter**( ) //进入临界区
}
void Unlock( )
{
Leave***() //推出临界区
}
CRITICAL_SECTION mCriticalSection;
};
如果存在一个对象AutoLock myLock 在其生命周期的范围内,自然会负责管理和消亡对因的临界区资源。
一定程度上 解决了资源管理的一些麻烦。
相关文章推荐
- 【C++设计技巧】C++中的RAII机制
- C++之 RAII基本理解与使用
- C++之RAII技术解析
- RAII惯用法:C++资源管理的利器
- RAII and smart pointers in C++ from stackflow
- C++资源管理的利器:RAII
- C++中的RAII机制
- C++中的RAII机制
- C++之RAII惯用法
- C++惯用法之RAII
- C++ RAII手法实例,不使用智能指针
- C++中利用析构避免资源泄露(RAII技术)
- RAII, Dynamic Objects, and Factories in C++
- C++之RAII机制[转]
- C++ | RAII 机制
- RAII惯用法:C++资源管理的利器
- C++的营养——RAII 转自 longshanks
- C++之RAII惯用法
- C++中的RAII机制 http://www.jellythink.com/archives/101
- 浅谈C++ 之RAII