网站上做相关链接,网站内容规划怎么写,结构优化设计,全国企业信息管理系统由于上一篇博客将shared_ptr,weak_ptr,enable_shared_form_this的源码实现整理了一遍,想着cpp智能指针还差个unique_ptr故写下此篇博客,以供学习 源码剖析
一,模板参数
首先,我们先看unique_ptr的模板参数,第一个参数_TP自是不用说表示对象类型,第二个模板参数定义了unique_p… 由于上一篇博客将shared_ptr,weak_ptr,enable_shared_form_this的源码实现整理了一遍,想着cpp智能指针还差个unique_ptr故写下此篇博客,以供学习 源码剖析
一,模板参数
首先,我们先看unique_ptr的模板参数,第一个参数_TP自是不用说表示对象类型,第二个模板参数定义了unique_ptr的删除器,typename _Dp default_delete_Tp,这里自带了一个默认删除器,我们先看看默认删除器会做什么实现, 可以看见默认删除器,就是直接将unique_ptr所持有的资源直接delete. 内存布局
接下来我们再看看unique的内存布局,可以看见是由一个__uniq_ptr_data的模板类管理这对象以及删除器,通过类继承的抽丝剥茧,可以发现最后是__uniq_ptr_impl类包含一个元组,其参数为对象指针和删除器 template typename _Tp, typename _Dpclass __uniq_ptr_impl {using pointer typename _Ptr_Tp, _Dp::type;private:tuplepointer, _Dp _M_t;}maek_unique
这里可以看见,make_unique是直接new了一个对象,将指针交给unique_ptr进行管理,并没有使用STL空间配置器,原因在末尾总结说明 总结
unique_ptr的删除器默认使用delete直接释放内存unique_ptr与shared_ptr不同,unique_ptr有删除器,shared_ptr没有unique_ptr底层使用tuplepointer, 删除器存储相关信息,由于是独占式,所以没有引用计数 uplepointer, 删除器存储相关信息,由于是独占式,所以没有引用计数make_unique使用new创建一个对象,而不是STL空间配置器,原因是unique_ptr的默认删除器使用delete