委托Delegation 笔记----C++学习之路
来源:互联网 发布:怎么设置淘宝店铺红包 编辑:程序博客网 时间:2024/06/05 02:25
1.委托的概念:
委托和复合非常相似,也是一个类含有has-a一个东西,但是这种拥有很虚,我们不知道何时才会拥有。只在我想
要用到这个东西的时候才去调用,这是与复合的不同。委托的另外一个术语就很明了:Compositon by reference
含有指针的复合,为什么不是by point,因为约定俗成,就是by reference。
举个例子:
class StringRep;class String{public: String(); String(const chat* s); String(const String& s); String &operator=(const String& s); ~String(); ....private: StringRep* rep;};
从寿命上来看,复合关系下的寿命是同步的,同时创建,同时死亡。而委托不同步。
从委托上来看,委托方也就是String只是一个对外的接口,而实现的功能全都委托给StringRep来做。
这种写法成为:pimpl (point to implementation),我有一根指针指向一个替我实现所有功能的类。
也成为 Handle/Body 左边为Handle,右边为Body。
这种写法实现,委托方对外不变,受委托方变。也就是受委托方变动不会影响客户端的东西,也称为编译防火墙。
2.关于这种写法的一些原理以及处理
StringRep代码:
#include "String.hpp"namespace{class StringRep{friend class String; StringRep(const char* s); ~StringRep(); int count; char* rep;};}String::String(){ .... }...
可以看到StringRep中的数据由count(图中的n)与一个字符指针rep。n外的大圆圈就是StringRep。
如图由三个字符串都指向hello,这个n将会是3.从共享上来看,内存就节省了。这就是Handle/Body的实现,可以做出reference counting共享的原理。
那么当我a要去改变hello,这个时候就会copy一份给a去更改,bc依然共享。这种叫做copy on write。
阅读全文
0 0
- 委托Delegation 笔记----C++学习之路
- delegation 委托
- C#“委托”学习笔记
- 学习笔记之----委托
- Objective-C学习之路 委托模式
- Objective-C学习之路 委托模式
- js | event delegation 事件委托之双十一
- delegation(委托)模式
- C#学习笔记之委托
- Object C学习笔记16-委托(delegate)
- Object C学习笔记16-委托(delegate)
- 关于继承与委托设计笔记----C++学习之路
- IOS学习笔记之协议与委托
- C#学习笔记之泛型委托
- 处理概括关系之十一 :Replace Inheritance with Delegation(以委托取代继承)
- 处理概括关系之十二 :Replace Delegation with Inheritance(以继承取代委托)
- iOS开发之设计模式(三)委托模式(Delegation)
- c++面向对象之复合(composition)、委托(delegation)、继承(inheritance)--(boolan)
- js css+html实现简单的日历
- iOS真机测试Profile文件更新不生效问题
- vue中 --- 变化检测问题(数组相关)
- 刷题记录
- C++和Lua交互教程(基于LuaBridge)
- 委托Delegation 笔记----C++学习之路
- deepin安装后无win10启动项
- android 的过场页面的实现
- druid连接池监控
- 为js生成的class添加点击事件
- 动态分布内存——free()函数与realloc()函数
- 文章标题
- 『机器学习实战』使用 k-近邻算法识别手写数字
- Android中的利器-AsyncTask