简单理解RAII(C++)

RAII(Resource Acquisition Is Initialization)是C++中的一种资源管理策略,通过构造函数获取资源并在析构函数中释放。它分为常性类型和变性类型,如boost::shared_ptr和std::auto_ptr。常性类型确保资源从构造到析构期间所有权不变,而变性类型允许中途更改资源。本文通过实例代码介绍了RAII的概念和应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值