1.C++类库的重用
使用方式
.h + lib
一旦被编译进项目,该模块不再有类库的概念,它已经是项目的一部分了。
在运行时,他不载入内存,有很多模块使用它,就有很多个拷贝存在内存中。
当类库被patch后,没办法刷新已发布的项目。
2.dll级别
使用方式
.h + lib + dll
其实,dll样式的重用已经不错了,而且使用def文件可以保证导出函数的一致性。
但是,我们无法处理异常等编译器相关的东西。
但是,dll有版本问题,实现的修改引发lib的修改,但是未经修改的dll在先的实现模式下很可能出问题。就譬如sizeof int 由 4 改为8的时候,相关的越界访问一定很明显。
3.接口防火墙
.h + lib + dll
函数太多是转发函数的开发量很大
性能不理想
而且,它依然是dll,还是没有解决二进制格式上的问题。
4.抽象基类作为二进制接口
这个地方引入了自己的new和delete方法
这个方案看似很比较完美,但是不支持接口的演化。
5.引入继承
这可以完美解决接口的扩充性
6.附带资源管理AddRef & Release
使用方式
.h + lib
一旦被编译进项目,该模块不再有类库的概念,它已经是项目的一部分了。
在运行时,他不载入内存,有很多模块使用它,就有很多个拷贝存在内存中。
当类库被patch后,没办法刷新已发布的项目。
2.dll级别
使用方式
.h + lib + dll
其实,dll样式的重用已经不错了,而且使用def文件可以保证导出函数的一致性。
但是,我们无法处理异常等编译器相关的东西。
但是,dll有版本问题,实现的修改引发lib的修改,但是未经修改的dll在先的实现模式下很可能出问题。就譬如sizeof int 由 4 改为8的时候,相关的越界访问一定很明显。
3.接口防火墙
.h + lib + dll
函数太多是转发函数的开发量很大
性能不理想
而且,它依然是dll,还是没有解决二进制格式上的问题。
4.抽象基类作为二进制接口
这个地方引入了自己的new和delete方法
这个方案看似很比较完美,但是不支持接口的演化。
5.引入继承
这可以完美解决接口的扩充性
6.附带资源管理AddRef & Release