首页 > 代码库 > std::tr1::shared_ptr内存使用
std::tr1::shared_ptr内存使用
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内存使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。