簡單智慧指標的實現
阿新 • • 發佈:2019-02-13
直上程式碼,大佬忽略
#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類的成員時,用的是 "->", 操作符