智能指针是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