简单理解RAII(C++)

1.什么是RAII?
RAII即"资源获取即初始化" 他是一种方法,定义一个类来封装资源的分配和释放,在类的构造函数中来实现资源的分配和初始化,在类的析构函数中实现资源的释放和清理,是C++中一种管理资源,避免资源泄漏的方法。因为在C++中任何类构造的对象最终都会调用析构函数销毁。
2.RAII的分类
RAII对资源分配的所有权可分为常性类型和变性类型,代表为boost:shared_ptr<>(即引用计数的方法)和std::auto_ptr<>(一个指针指向一块内存)。
常性类型为:获取资源的地点是构造函数,释放点是析构函数,并且在构造到析构之间,任何对RAII类型实例的操作都不能拿走它对资源的所有权。
简单理解RAII(C++)_第1张图片
变形类型为:中途可以被设置为接管另外一个资源,或者被置为不拥有任何资源。
简单理解RAII(C++)_第2张图片
实例代码:

//每当处理需要配对的获取/释放函数调用的资源时,
//都应该将资源封装在一个对象中,实现自动资源释放。
//例如,我们无需直接调用一对非成员函数OpenPort/ClosePort,
//而是可以考虑定义常性且内部初始化的RAII概念的“端口”操作类:
class Port{
public:
Port(const string& destination);//调用OpenPort
~Port();//调用ClosePort
};
void DoSomething(){
Port port1(“server1:80”);
…
}
shared_ptr post2 = /*…*/; //port2在最后一个引用它的
//shared_ptr离开作用域后关闭
//通过使用上述RAII类型,可以避免程序员忘记关闭端口而引起的泄漏,
//还可以确保异常发生时栈展开过程中自动释放端口资源。

你可能感兴趣的:(C++)