直上代码,大佬忽略
#include <iostream>
#include <string>
using namespace std;
//定义智能指针模板类
template<typename T>
class SmartPointer
{
private:
T* m_sPointer;
public:
SmartPointer(const T* pointer)
{
m_sPointer =const_cast<T*>(pointer);
}
~SmartPointer()
{
cout << "~SmartPointer()" <<endl;
if(m_sPointer != NULL)
delete m_sPointer; //如果m_sPointer是一个类指针的话, 会调用类的析构函数
}
T& operator *()
{
return *m_sPointer;
}
T* operator ->()
{
return m_sPointer;
}
};
//测试类
class Test
{
private:
string m_str;
public:
Test(const string str = "123456")
{
m_str = str;
}
~Test()
{
cout << "~Test()" <<endl;
}
void Print()
{
cout << m_str <<endl;
}
void Set(const string t = "set")
{
m_str = t;
}
};
int main(int args, char* argv[])
{
if(1)
{
SmartPointer<Test> spT(new Test("AAAAAA"));
spT->Print();
(*spT).Print();
spT->Set("Go");
spT->Print();
}
system("pause");
return 0;
}
注意:
智能指针类调用自己的成员时,用的是 "."操作符;调用Test类的成员时,用的是 "->", 操作符