码迷,mamicode.com
首页 > 其他好文 > 详细

auto_ptr和shared_ptr

时间:2015-06-03 17:35:48      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

  《Effective C++》在资源管理一节提到了智能指针,智能指针中最著名的当属auto_ptr和shared_ptr。本文主要研究两者的实现。

auto_ptr的实现:

template<class T>
class auto_ptr
{
private:
    T *ap;
public:
    explicit auto_ptr(T *ptr = 0):ap(ptr){}
    ~auto_ptr(){delete ap;}
    auto_ptr(auto_ptr &rhs):ap(rhs.release()){}
    auto_ptr& operator=(auto_ptr &rhs)
    {
        reset(rhs.release());
        return *this;
    }
    T* operator*() const {return *ap;}
    T* operator->() const {return ap;}
    T* get() const {return ap;}
    T* release()
    {
        T *tmp = ap;
        ap = 0;
        return tmp;
    }
    void reset(T *ptr = 0)
    {
        if (ptr != ap)
        {
            delete ap;
            ap = ptr;
        }
    }
};

参考资料:http://www.kafka0102.com/2010/02/62.html

auto_ptr的缺点:

  1. 复制或赋值行为不正常,因此不能置于容器中。

  2. 不能用于管理动态分配的数组。

auto_ptr和shared_ptr

标签:

原文地址:http://www.cnblogs.com/gattaca/p/4549528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!