首页 > 其他 > 详细

std::tr1::shared_ptr内存使用

时间:2017-05-09 20:08:06      阅读:315      评论:0      收藏:0      [点我收藏+]

shared_ptr定义如下:

template<typename _Tp>
class shared_ptr
{private:
    _Tp*         _M_ptr;         // contained pointer
    shared_count _M_refcount;    // reference counter
};

shared_count定义如下:

class shared_count
{
public:
    template<typename _Ptr, typename _Deleter> 
    shared_count(_Ptr __p, _Deleter __d) : _M_pi(0) 
    { 
        _M_pi = new _Sp_counted_base_impl<_Ptr, _Deleter>(__p, __d); 
    }
private:
    _Sp_counted_base* _M_pi;                                                                                                                                                  
};

_Sp_counted_base定义如下:

class _Sp_counted_base
{
private:
    _Atomic_word _M_use_count;        // #shared
    _Atomic_word _M_weak_count;       // #weak + (#shared != 0)
    __gnu_cxx::mutex_type _M_mutex;
};

template<typename _Ptr, typename _Deleter>
class _Sp_counted_base_impl : public _Sp_counted_base
{
private:
    _Ptr     _M_ptr; // copy constructor must not throw
    _Deleter _M_del; // copy constructor must not throw
};

sizeof(_Sp_counted_base) = 48,在_Sp_counted_base_Impl中,_Ptr是对象指针,而_M_del结构如下:

template<typename _Tp>
struct _Sp_deleter
{
    typedef void result_type;
    typedef _Tp* argument_type;

    void operator()(_Tp* p) const
    {
        delete p;
    }                                                                                                                                                                         
};

因此shared_ptr对象的体积为72:

 

std::tr1::shared_ptr内存使用

原文:http://www.cnblogs.com/lvzhiqiang/p/6832306.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!