1. 程式人生 > >簡單智慧指標的實現

簡單智慧指標的實現

直上程式碼,大佬忽略

#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類的成員時,用的是   "->", 操作符