实现说明
1.要对解引用运算符和箭头运算符进行重载
类似:
T& operator*(); //解引用重载
T* operator->(); //箭头运算符重载
2.自定义析构函数
智能指针的成员变量有堆上分配出来的部分,默认的析构函数不能完全的释放资源
3.定义拷贝构造函数和拷贝赋值运算符重载
引用计数就是在上述函数中完成,所以需要自定义实现
实现代码
template <typename T>
class Shared_ptr
{
public:
//构造函数
Shared_ptr() : ptr_(nullptr), count_(new int(0))
{
cout<<"申请空间:"<<ptr<<endl;
}
Shared_ptr( T* ptr ) : ptr_(ptr), count_(new int(0))
{
cout<<"申请空间:"<<ptr<<endl;
*count_ = 1;
}
//析构函数
~Shared_ptr()
{
--(*count_);
if(*count_ == 0)
{
cout<<"释放空间:"<<ptr_<<endl;
delete ptr_;
delete count_;
ptr_ = nullptr;
count_ = nullptr;
}
}
//拷贝构造函数
Shared_ptr( const Shared_ptr& ptr )