智能指針是C++實現自動內存管理的一種手段,本質是經過對象出做用域會自動析構,讓對象保存與所需管理的目標指針指向同一片動態開闢空間的地址,出做用域會自動析構。這裏模擬了,boost中的share智能指針,代碼以下:
ide
#pragma once template<class T> class SharePtr { public: SharePtr(T*ptr) :_ptr(ptr), _Rcount(new size_t(1))//引用計數解決拷貝構造與賦值運算符重載的問題 { } ~SharePtr() { if (--(*_Rcount)) { delete _ptr; delete _Rcount; } } SharePtr(const SharePtr&ptr) :_ptr(ptr) { ++(*_Rcount); } SharePtr& operator = (SharePtr ptr) { swap(_ptr, ptr._ptr); swap(_Rcount, ptr._Rcount); return *this; } T & operator * ()//使對象完成與指針相似的操做,在這裏重載了「*」、「->」的操做符 { return *_ptr; } T * operator ->() { return _ptr; } size_t GetRefCount() { return *_Rcount; } private: T *_ptr; size_t* _Rcount; };
若有不足,但願批評指正。
this