_Ptr_base介绍 C++

_Ptr_base是C++智能指针(如shared_ptr, weak_ptr)的基类,包含_Ptr和_Rep两个核心成员,分别指向目标元素和计数器。文章详细介绍了_Ptr_base的构造、析构函数,以及public和protected成员函数,如use_count(), owner_before()等。" 116898783,10294859,Linux内核的节拍率与系统计时,"['Linux内核', '系统计时', '硬件芯片']
摘要由CSDN通过智能技术生成

_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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值