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[]释放资源