C++:模拟实现shared_ptr

声明,本次实现的是简易版本,没有库里面这么复杂

目录

一.框架

二.构造函数

三.拷贝构造

四.拷贝赋值

五.运算符重载与析构函数

​编辑六.删除器的实现


一.框架

1.首先shared_ptr是一个类,带有一个模板参数,用于确定指针的类型

2.他有两个私有成员成员,一个是_ptr,存的是指针指向的地址,另一个是_pcount,用于判断有多少智能指针管理这同一块空间

namespace my
{
	template<class T>
	class shared_ptr
	{
	    private:
		T* _ptr;
		int* _pcount;

	};

}

二.构造函数

用传递过来的指针赋初始化_ptr,然后new 一个int大小的空间,初始化为1,代表现在只有这一个智能指针管理这一块空间

三.拷贝构造

拷贝构造时,就是将另一个智能指针的成员拷贝过来,然后++(*pcount)因为多了一个智能指针管理这个空间

四.拷贝赋值

看我上面的注释,不需要过多讲解了

五.运算符重载与析构函数


六.删除器的实现

指针可能指向一个数组,指向数组的时候就不能使用delete来释放动态开辟的资源,需要使用delete[],所以我们实现一个删除器,来解决这种情况

1.我们实现一个带模板参数的构造,参数类型期望传一个可调用对象进来,这样就可以控制,是使用delete还是delete[]

2.添加一个私有成员变量来接收这个可调用对象del,我们使用一个包装器来接收,返回值是void,参数只有一个T*(因为要释放的指针一定是T*类型的)

3.在release里使用删除器来删除_ptr

好了,现在删除器就完成了,可以控制delete和delete[]释放资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值