《COM本质论》第一章学习(4)
来源:互联网 发布:fimage软件 编辑:程序博客网 时间:2024/04/29 19:58
class IExtensibleObject
{
virtual void *Dynamic_cast(const char *pszType) = 0;
virtual void DuplicatePointer(void) = 0;
virtual void DestroyPointer(void) = 0;
};
基类接口抽象成这样的形式,Dynamic_cast()进行运行时类型识别,DuplicatePointer()实现引用计数,DestroyPointer()释放对象。
所解决的问题:
1、C++的dynamic_cast是编译器相关的,因此,从每一个接口显示地暴露一个广为人知的方法,由这个方法完成与dynamic_cast语义等价的功能。
2、多个指针指向同一个对象时,容易导致多次调用Delete()函数。因此采用引用计数机制保证Delete()只会被调用一次。
显然的,这三个方法是每一个接口都需要的,因此抽象到一个基类中。
class IFastString : public IExtensibleObject
{
public:
virtual int Length(void) const = 0;
virtual int Find(const char *psz) const = 0;
};
结合前面三部分(前面三篇文章)完成这一步以后,就能把类做成可重用的二进制组件了。
整理思路:
第一步:以动态库形式发布类,从物理上把类与客户分离。
第二步:采用接口与实现分离的方式,使客户无需在意类的内存布局。
第三步:采用抽象基类作为定义接口的方法,以vptr和vtbl的形式构建二进制防火墙。
第四步:使用LoadLibrary和GetProcAddress在运行时动态的选择同一接口的不同实现。
第五步:使用与RTTI类似的结构,在运行时动态询问对象,确定对象是否实现了指定接口。
第六步:使用引用计数,保证单个对象被多个指针引用,而不会重复删除。
这就是COM模型。
- 《COM本质论》第一章学习(4)
- 《COM本质论》第一章学习(1)
- 《COM本质论》第一章学习(2)
- 《COM本质论》第一章学习(3)
- COM本质论(PDF中文版,非扫描版)- 第一章
- 《COM本质论》学习笔记 (1)
- com本质论学习笔记
- 初学《COM本质论》第一章后的感想
- 《COM本质论》第二章学习(1)
- 《COM本质论》第二章学习(2)
- 《COM本质论》第三章学习(1)
- 《COM本质论》第四章学习(1)
- COM本质论学习日志(2)--12.31
- COM本质论学习笔记(一)IDL
- com本质论笔记
- COM本质论 笔记
- 重读COM本质的体会--第一章
- com本质论 读书笔记(5)
- All came true,My first day in new company
- 用jQuery实现multiple select(列表框)左右添加和删除功能
- 保护理念下的森林公园游憩方式创新设计(转)
- 排序方法汇总-JAVA实现
- Tomcat web.xml 文件详解
- 《COM本质论》第一章学习(4)
- 对被final关键字修饰的方法执行效率的一段测试
- 如何设置和改变win xp系统属性的图标?
- 森林探险旅游开发模式初探(转)
- IBM收购数据分析软件公司Exeros
- 数独问题的一种简单算法代码实现
- PKU3278 Catch That Cow 基础广搜
- VOIP开源软件列表
- QQ找茬辅助工具的制作