资源管理类

一:应用背景

在一个系统中我们往往会用到很多全局的资源,比如缓存、监控器等资源,此时我们会需要一个类来管理这些类对象,使这些资源的生命周期内自动管理,不需要用户自动管理释放这些资源.


二:代码样例

/*!
 * \file scoped_ptr.h
 * \brief 资源管理类
 *
 *
 * \author *
 * \version 1.0
 * \date 
 */

#ifndef DCR_scoped_ptr_h
#define DCR_scoped_ptr_h

#include <cassert>
#include <cstdlib>

template <class T> class scoped_ptr;

///
/// \brief 资源管理类
///
template <class T>
class scoped_ptr {
public:
    
    typedef T element_type;
    
    explicit scoped_ptr(T *p = NULL):m_ptr(p) {}
    
    ///
    /// \brief 析构函数要防止删除不完整类型
    ///
    ~scoped_ptr() {
        enum {
            type_must_be_complete = sizeof(T)
        };
        delete m_ptr;
    }
    
    ///
    /// \brief 重置指针
    ///
    void reset(T *p = NULL) {
        if (p != m_ptr) {
            enum {
                type_must_be_complete = sizeof(T)
            };
            delete m_ptr;
            m_ptr = p;
        }
    }
    
    ///
    /// \brief 重载*运算符
    ///
    T& operator *() const {
        assert(m_ptr != NULL);
        return *m_ptr;
    }
    
    ///
    /// \brief 重载->运算符
    ///
    T* operator->() const {
        assert(m_ptr != NULL);
        return m_ptr;
    }
    
    T* get() const{
        return m_ptr;
    }
    
    ///
    /// \brief 重载==运算符
    ///
    bool operator==(T *p)const {
        return m_ptr == p;
    }
    
    ///
    /// \brief 重载!=运算符
    ///
    bool operator!=(T *p)const {
        return m_ptr != p;
    }
    
    ///
    /// \brief 交换两个资源管理类的
    ///

    void swap(scoped_ptr& p2) {
        T* tmp = m_ptr;
        m_ptr = p2.m_ptr;
        p2.m_ptr = tmp;
    }
    
    ///
    /// \brief 资源管理类放弃资源
    ///
    T* release() {
        T* retVal = m_ptr;
        m_ptr = NULL;
        return retVal;
    }
    
    
private:
    T *m_ptr;   ///<  资源指针
    
    ///
    /// \brief 资源管理类禁止比较
    ///
    template <class C2>
    bool operator==(scoped_ptr<C2> const& p2) const;
    
    ///
    /// \brief 资源管理类禁止比较
    ///
    template <class C2>
    bool operator!=(scoped_ptr<C2> const& p2) const;
    
    ///
    /// \brief 禁止复制构造
    ///
    scoped_ptr(const scoped_ptr&);
    
    ///
    /// \brief 禁止赋值
    ///
    void operator=(const scoped_ptr&);
};

#endif


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值