C++句柄的理解
2014-01-16 16:17
489 查看
通俗的讲,c++句柄就像一个“复合指针”:它不但“指向”某个对象,还“记录”所指对象由于复制/赋值而被其他句柄拥有的次数。当没有句柄与该对象关联的时候,他还负责删除该对象。
泛型句柄类模板:
句柄实际上是一个类,之所以说他像一个指针,因为他重载了指针的解引用操作符和成员访问操作符;
ptr 指向句柄所要管理的对象,use指向次对象被其他句柄关联的次数,当没有其他句柄关联次对象的时候通过del()函数删除该对象。
使用句柄的好处是:用户在某些地方需要用指针操作对象时(比如把书(父类对象)和打折的书(派生类对象)加入同一个购物车Vector中),
用句柄而不用指针,可以无需担心指针的管理(e,什么时候该删除对象,指针删除的时候?还有别的指针指向次对象呢?),同时也可以获得动态绑定的行为。因为,句柄可以根据use来判断什么时候该删除对象。
泛型句柄类模板:
template<typename T> class Handel{ public: Handle(T *p = 0):ptr(p),use(new size_t(1)){} T& operator*(){ if(ptr) return *ptr; } T* operator->(){ if(ptr) return ptr; } Handle(const Handle &h):ptr(h.ptr),use(h.use){++*use} Handle& operator=(const Handle &h){ ++*use; del(); ptr = h.ptr; use = h.use; return *this; } ~Handel(){del();} private: T* ptr; std::size_t *use; void del(){ if(--*use == 0) { delete ptr; delete use; } } };
句柄实际上是一个类,之所以说他像一个指针,因为他重载了指针的解引用操作符和成员访问操作符;
ptr 指向句柄所要管理的对象,use指向次对象被其他句柄关联的次数,当没有其他句柄关联次对象的时候通过del()函数删除该对象。
使用句柄的好处是:用户在某些地方需要用指针操作对象时(比如把书(父类对象)和打折的书(派生类对象)加入同一个购物车Vector中),
用句柄而不用指针,可以无需担心指针的管理(e,什么时候该删除对象,指针删除的时候?还有别的指针指向次对象呢?),同时也可以获得动态绑定的行为。因为,句柄可以根据use来判断什么时候该删除对象。
相关文章推荐
- 如何理解C和C++的复杂类型声明
- 我所理解的设计模式(C++实现)——迭代器模式(Iterator Pattern)
- C++并发编程实战(读书笔记)——C++内存模型不好理解;无锁数据结构?但是等待不就是被锁住了吗??
- 深入理解C++的动态绑定和静态绑定
- 《Effective Modern C++》翻译--条款3: 理解decltype
- c++内存泄露(一):理解内存泄漏及内存泄漏常见情况
- Protocol Buffer技术深入理解(C++实例)
- c++的类的理解
- 如何理解c和c++的复杂类型声明
- 对c++的一些理解
- c++中的句柄与指针的区别(转自网络)
- 关于地址的理解 C++
- 关于C++中常量的理解
- 正确的理解C/C++程序的内存分区
- 不理解C/C++的函数指针
- Primer plus C++ 第十一章 类和动态内存分配_反面理解String类(class and dynamic memory allocation)
- C++:name lookup的规则(我的理解,未确定正确性)
- 【转载】对缓冲区的理解 C++
- More Effective C++----(24)理解虚拟函数、多继承、虚继承和RTTI所需的代价
- 惭愧,直到今天才对“数据类型字节对齐”有个深入的了解,对以前读书时学习的知识没有深刻理解啊 C/C++学习 C/C++学习 漫漫人生,澎湃的经历不断促使改变自己,永恒不变的是一颗骄傲的心!