智能指针的简单实现
2015-06-21 14:59
267 查看
智能指针:它的一种通用实现方法是采用引用计数的方法。智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针。有两种实现方法,本例简单的实现了智能指针。
#include <iostream> #include <stdlib.h> using namespace std; template <typename T> class smartPtr { public: smartPtr(T *ptr):_ptr(ptr),useCountPtr(new int(1)){ } smartPtr(){}; smartPtr(const smartPtr<T> & org):_ptr(org.getPtr()),useCountPtr(org.getUseCountPtr()){ ++(*useCountPtr); } public: smartPtr<T> & operator=(const smartPtr& org){ /* code */ _ptr=org.getPtr(); useCountPtr=org.getUseCountPtr(); ++(*useCountPtr); return *this; } void setValue(T date){ *_ptr=date; } T getValue() const{ return *_ptr; } T *getPtr() const{ return _ptr; } int *getUseCountPtr() const { return useCountPtr; } virtual ~smartPtr(){ cout<<"distructor usecount is "<<(*useCountPtr)-1<<endl; if (--(*useCountPtr)==0) { /* code */delete _ptr; _ptr=NULL; std::cout<<"ptr delete safely!!!"; delete useCountPtr; useCountPtr=NULL; } } private: T* _ptr; int *useCountPtr; /* data */ }; int main(){ int* num=new int(10); smartPtr<int> *pp=new smartPtr<int>(num); smartPtr<int> *pp1=new smartPtr<int>(*pp); smartPtr<int> ss(*pp); cout<<ss.getValue()<<endl; delete pp; delete pp1; }还可重载操作符new 来进行实现。
相关文章推荐
- 「深入 Exchange 2013」02 CAS的身份验证方法
- yum
- 《生命如一泓清水》俞敏洪
- xavierFiller 体会
- 国内UED大全
- 开始Unity3D参观考察
- SoC嵌入式软件架构设计II:没有MMU的CPU虚拟内存管理的设计和实现方法
- 黑马程序员_Java_多线程
- 访问日志IO性能优化
- sgu 275
- - (UIIMAGE *)STRETCHABLEIMAGEWITHLEFTCAPWIDTH:(NSINTEGER)LEFTCAPWIDTH TOPCAPHEIGHT:(NSINTEGER)TOPCAP
- 访问日志IO性能优化
- sgu 275 分类: sgu 2015-06-21 14:56 18人阅读 评论(0) 收藏
- 关于
- javascript错误处理与调试
- 41-h-firstMissingPositive
- Python中的sorted函数以及operator.itemgetter函数
- 9*9口诀
- Java数据结构系列——简单排序:泡、选择、直接进入
- 【SQL】——触发器