智能指针之scoped_ptr的实现

scoped_ptr

scoped_ptr正如其字面意思 scoped:作用域 
scoped_ptr只实现了智能指针的通用特性:栈管理堆
当超出当前作用域时,scoped_ptr释放指向的对象.

scoped_ptr的实现

智能指针的大致原理:
智能指针内部都会保存一个指向保存对象的指针
调用reset或构造时,指针指向一个对象
调用release或超出作用域(即自动析构),指针不再指向对象(析构时还会delete释放掉指向的对象)

template <class C>
class scoped_ptr {
public:
    explicit scoped_ptr(C* p = NULL) : ptr_(p) { } //构造时内部指针指向对象
    ~scoped_ptr() {
    enum { type_must_be_complete = sizeof(C) }; //防止C的不完全声明
    delete ptr_; //析构时释放对象

    void reset(C* p = NULL) { //reset时并不释放对象 仅仅使指针不再指向原先的对象
    if (p != ptr_) {
      enum { type_must_be_complete = sizeof(C) };
      delete ptr_;
      ptr_ = p;
    }

    //重载*和->
    C& operator*() const {
        assert(ptr_ != NULL);
        return *ptr_;
    }
    C* operator->() const  {
        assert(ptr_ != NULL);
        return ptr_;
    }
    C* get() const { return ptr_; } //get获取指向保存的对象的指针

    C* release() { //release时不释放对象 仅改变内部指针的指向.
        C* retVal = ptr_;
        ptr_ = NULL;
        return retVal;
    }
  }
private:
    C* ptr_;
};
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值