RAII技术的C++常规实现

关键词: C++, RAII

RAII:Resource Acquisition Is Initialization,资源获取即初始化(以初始化的方式获取资源)。即:使用对象来代表或管理资源,利用C++对象生命期的概念控制资源的获取和释放,将资源的生命期和对象的生命期紧密关联到一起。如需要某种资源(内存、缓冲区、文件句柄、网络连接等等),则创建一个代表该资源的RAII类的对象即可。步骤有三:


// 该类代表原始资源
class Resource 
{
    // ... 
};		

// 该类基于RAII技术使用资源Resource
class ResourceRAII	
{
public:
    // 构造时获取资源
    explicit ResourceRAII (Resource* resource) : r (resource) { }  

    // 析构时释放资源
    ~ResourceRAII()               { delete r; };					 

    // 访问资源
    Resource* getResource() const { return r; }	

private:
    Resource* r;        // 本类所持有的资源

    void* operator new (size_t);      // 禁止创建本类的堆对象
    void operator delete (void*);     // 禁止销毁本类的堆对象

    // 本类无需拷构与赋值
    // ...
};

由上可知,该类无法new堆对象,只能使用栈对象。创建对象即拥有资源,该对象离开作用域时,自动释放资源。

SwingCoder


如果本文对您有所启发或助益,请微信打赏

创作时间: 2013.02.20 19:08
最后修改: 2017.05.10 15:27

本文版权:UnderwaySoft   共享协议:署名-非商业使用-禁止演绎


上一篇: Rhine-专业级多轨录音与混缩系统
下一篇: 谈谈源码分析

 随机推荐:
Email: underwaySoft@126.com 微信公众号: UnderwaySoft