算法24:智能指针的原理和使用
2017-03-30 17:39
369 查看
c++代码
template <typename T> class SmartPtr { public: SmartPtr(T* p = 0):ptr(p),count(new int(1)){} //复制构造函数 SmartPtr(const SmartPtr& sp):ptr(sp.ptr),count(sp.count) { ++count; } //重载赋值操作符 SmartPtr& operator=(const SmartPtr& rp) { ++*rp.count; DecCount(); ptr = rp.ptr; count = rp.count; return *this; } //重载赋值操作符 SmartPtr& operator=(SmartPtr& rp) { ++*rp.count; DecCount(); ptr = rp.ptr; count = rp.count; return *this; } ~SmartPtr() { DecCount(); } private: void DecCount() { if(--*count <= 0) { delete ptr; delete count; ptr = NULL; count = NULL; } } private: T* ptr; int* count; };
智能指针一种通用的方法就是采用引用计数的方法,将智能指针与类的对象联系在一起,引用计数共有多少个对象共享同一个指针。
当创建新对象时,初始化指针并设置计数器为1。
当对象作为另外一个对象副本创建时,拷贝构造函数拷贝指针并且增加计数器的值。
当对一个对象赋值时,赋值操作符减少左操作数所指对象的计数器(当计数器被减为0时,删除对象),并增加右操作数所指的引用计数。
调用析构函数时,减少引用计数(当计数器被减为0时,删除对象)
相关文章推荐
- C++中智能指针的原理和简单使用
- 有效的使用和设计COM智能指针——条款3:按照功能和实现原理选择合适的智能指针
- 有效的使用和设计COM智能指针——条款24:努力使得接口容易被使用而不易被误用。
- 智能指针的实现--使用引用计数实现以及原理
- C/C++:智能指针原理(运算符重载)、使用auto_ptr<A>
- C++智能指针auto_ptr的原理及使用
- C++11中智能指针的原理、使用、实现
- 有效的使用和设计COM智能指针 条款8:条款9:尽可能不将智能指针放置于堆上
- C++:智能指针-TR1的shared_ptr和weak_ptr使用介绍
- 使用C++标准类库的智能指针(源代码)
- boost::share_ptr智能指针使用示例
- 有效的使用和设计COM智能指针 ——条款5:了解_com_ptr_t 设计背后的历史原因
- boost::share_ptr智能指针使用示例
- Loki 智能指针 SmartPtr 的使用
- C++ 之 高效使用STL(泛型算法设计原理解析)
- 有效的使用和设计COM智能指针——条款2:引用计数的是与非
- 请谈谈什么是智能指针,com实现的原理 zz
- 智能指针 CComPtr 和 CComQIPtr 使用说明
- 智能指针auto_ptr使用注意事项
- 智能指针auto_prt的使用(c++学习笔记)