實現智慧指標(Smart Pointer)
阿新 • • 發佈:2018-12-11
#ifndef SMARTPTR_H_ #define SMARTPTR_H_ template<typename T> struct SmartPtr { explicit SmartPtr(T* ptr = nullptr) : dumpPtr(ptr){} explicit SmartPtr(const SmartPtr& rhs) { if (this != &rhs) { dumpPtr = rhs.operator ->(); } } ~SmartPtr() { if (dumpPtr) { delete dumpPtr; } } SmartPtr& operator=(const SmartPtr& rhs) { if (this != &rhs) { if (dumpPtr) delete dumpPtr; dumpPtr = rhs.operator ->(); } return *this; } T* operator->() const { return dumpPtr; } T& operator*() const { return *dumpPtr; } private: T* dumpPtr; }; #endif
#include <iostream> #include "SmartPtr.h" using namespace std; struct Pig { void Print() { cout << "this is pigsy" << endl; } ~Pig() { cout << "Kill the pigsy" << endl; } }; int main(int argc, char **argv) { SmartPtr<Pig> pigsy(new Pig()); pigsy->Print(); pigsy.operator *().Print(); return 0; }