_Ptr_base是c++的智能指针如shared_ptr, weak_ptr等的基类。本文将介绍_Ptr_base的成员以及具体实现方法。
首先是最重要的两个private变量:
template<class _Ty>
class _Ptr_base
{
private:
element_type * _Ptr{
nullptr}; // using element_type = remove_extent_t<_Ty>;
_Ref_count_base * _Rep{
nullptr};
};
1. _Ptr
_Ptr指向目标元素的地址,其类型为remove_extent_t<_Ty> *
这里简单介绍一下remove_extent_t:
template<class _Ty>
using remove_extent_t = typename remove_extent<_Ty>::type;
template<class _Ty>
struct remove_extent
{
// remove array extent
using type = _Ty;
};
template<class _Ty, size_t _Ix>
struct remove_extent<_Ty[_Ix]>
{
// remove array extent
using type = _Ty;
};
template<class _Ty>
struct remove_extent<_Ty[]>
{
// remove array extent
using type = _Ty;
};
remove_extent会去掉传入类型中的array extent,举个简单的例子
int a = 0;
typeid(remove_extent<int>::type) == typeid(a); // true
typeid(remove_extent<int[]>::type) == typeid(a); // true
typeid(remove_extent<int[2]>::type) == typeid(a); // true
typeid(remove_extent<int