"COM as a better C++"读后小结

来源:互联网 发布:可视化软件开发工具 编辑:程序博客网 时间:2024/05/24 07:16

为什么要做这么多:

dynamic composable system
compiler-independent

1:类的声明和实现的分离

在h中定义接口,在CPP中定义实现

2:仅向用户暴露接口

在h中定义基类,仅包含纯虚函数声明,同时提供virtual destroy()方法而不把析构函数声明为虚;
同时声明创建子类的方法,并返回基类指针;

3:运行时多态

由于接口和实现的完全分离,同样一套接口可以有不同的实现,可以在调用的时候根据参数判断导入哪一个DLL

4:类的扩展

方法一通过对原有接口的继承,为防止新接口对旧实现的调用而出错,使用RTTI来判断具体实现对象的类型(i.e.  dynamic_cast< derived * >( base * ) )

由于dynamic_cast<>是一个编译器依赖的方法,大家对它的实现可能不完全相同,而我们使用虚基类作为接口就是为了编译器无关这个目的,那么使用它将会破坏这个封装。那么需要自己实现RTTI,每个类都必须手动写RTTI的实现,

5: 公有虚接口

既然大家都要用到诸如dynamic_cast和delete等虚接口,那么把它们抽出来做为一个最基本的基类

6:引用计数功能的加入

由于使用了多继承,在创建和删除对象的时候可能会使的客户代码变得复杂,所以加入一个引用计数,每个指针的delete会使计数器减1,当计数为0的时候对象将被自动析构,同样的,指针在被复制的时候需要对引用计数器加1 

原创粉丝点击