#include<iostream>
using namespace std;
template<typename T>
class my_shared_ptr
{
private:
T * m_ptr;//保存指针
public :
explicit my_shared_ptr():m_ptr(NULL)//my_shared_ptr<int> a;无参构造没有保护指针
{
}
explicit my_shared_ptr(T * ptr):m_ptr(ptr)//int *p = new int (1231);
{ //my_shared_ptr<int> a(p);有参构造
m_ptr->AddRef();
}
~my_shared_ptr()//析构函数
{
m_ptr->ReleaseRef();
}
my_shared_ptr(my_shared_ptr<T> &ptr)//拷贝构造 my_shared_ptr<int> b(a);
{
m_ptr = ptr.Get();
m_ptr->AddRef();
}
template<typename TT>
my_shared_ptr(my_shared_ptr<TT>/*int b*/ &ptr)//不同类型的拷贝构造 my_shared_ptr <short> c(b);
{
m_ptr = (T*)ptr.Get();
m_ptr->AddRef();
}
T *Get()
{
return m_ptr;
}
/*my_shared_ptr<T>& operator = (my_shared_ptr<T> &ptr)
{
if(this == &ptr)
{
return (*this);
}
else if(m_ptr)
{
delete m_ptr;
m_ptr = NULL;
m_ptr = ptr.Get();
return (*this);
}
m_ptr = ptr.Get();
m_ptr->AddRef();
return (*this);
}*/
};
class RefBase
{
private:
int m_iCount;
public :
RefBase():m_iCount(0)
{
}
long AddRef()
{
return ++m_iCount;
}
void ReleaseRef()
{
--m_iCount;
if(m_iCount <= 0)
{
delete this;
}
}
};
class CTest:public RefBase
{
public :
};
int main()
{
//int *p = new int (1234);
//my_shared_ptr<int> a(p);//有参构造
//my_shared_ptr<int> b(a);//拷贝构造
//my_shared_ptr<short> c(b);//不同类型的类的拷贝构造
{
CTest *test = new CTest;
my_shared_ptr<CTest> test1(test);
my_shared_ptr<CTest> test2(test);
/*my_shared_ptr<CTest> test3(test);*/
my_shared_ptr<CTest> test3(test2);
my_shared_ptr<CTest> test4;
test2 = test1;
}
system("pause");
return 0;
}
智能指针shared_ptr
最新推荐文章于 2025-06-18 21:34:08 发布