ant中copy操作学习心得
2007-08-24 06:24
197 查看
C++在接口和实现之间的分离这部分工作做的不好。像下面这样的类定义,不仅指明了接口,也包含了一部分的实现细节。这将导致对实现的依赖。实现一旦改变,将增加整个的编译时间。
可是,这样的include建立了Person对这些头文件的编译依赖。如果这三个头文件改变,Person就要重新编译(string是标准库,改变的机率不大,可以随便包含)。当然依赖Person的也要重编,于是产生了级联效应。
解决这个问题有两个办法:把Person变成句柄类(Handle Class)或接口类(Interface Class)。
先看句柄类:
使用接口类,一般会在接口类里定义工厂函数(factory function),或叫作虚拟构造函数(virtual ctor),然后再从Person里派生出实体类(concrete class)。
使用接口类和句柄类的代价:运行时的速度会慢一点;内存会多一点。
句柄类:因为使用了impl指针,所以多了一点内存。这个指针要初始化,要为对象申请内存,要销毁。
接口类:有虚函数指针,要进行函数跳转。
无论是句柄类,还是接口类,都不能使用inline函数。以Person为例,PersonFwd.h里是不能出现任何函数体的。
但是因为这一点点代价就不使用句柄类和接口类了吗?答案是否定的。因为要尽量减小对客户的影响。
#include <string> #include "date.h" #include "address.h"
可是,这样的include建立了Person对这些头文件的编译依赖。如果这三个头文件改变,Person就要重新编译(string是标准库,改变的机率不大,可以随便包含)。当然依赖Person的也要重编,于是产生了级联效应。
解决这个问题有两个办法:把Person变成句柄类(Handle Class)或接口类(Interface Class)。
先看句柄类:
class Person { public: virtual ~Person(); virtual std::string name() const = 0; virtual std::string birthDate() const = 0; virtual std::string address() const = 0; ... static std::tr1::shared_ptr<Person> // return a tr1::shared_ptr to a new create(const std::string& name, // Person initialized with the given params; const Date& birthday, // see Item 18 for why a const Address& addr); // tr1::shared_ptr is returned };
使用接口类,一般会在接口类里定义工厂函数(factory function),或叫作虚拟构造函数(virtual ctor),然后再从Person里派生出实体类(concrete class)。
使用接口类和句柄类的代价:运行时的速度会慢一点;内存会多一点。
句柄类:因为使用了impl指针,所以多了一点内存。这个指针要初始化,要为对象申请内存,要销毁。
接口类:有虚函数指针,要进行函数跳转。
无论是句柄类,还是接口类,都不能使用inline函数。以Person为例,PersonFwd.h里是不能出现任何函数体的。
但是因为这一点点代价就不使用句柄类和接口类了吗?答案是否定的。因为要尽量减小对客户的影响。
相关文章推荐
- ant中copy操作学习心得(转)
- ant中copy操作学习心得
- ANT应用:copy操作学习心得
- ant中copy操作学习心得
- ant中copy操作学习心得
- ant中copy操作学习心得
- 【转载】ant中copy操作学习心得
- ant中copy操作学习心得
- ant中copy操作学习心得(转)
- java基础学习:常用的ant的操作
- python 中execl等表格操作学习心得
- Gradle学习(十七)——Ant操作
- skyline TEP学习心得(1):工程树ProjectTree操作两例
- 黑马程序员--Java基础学习之IO流之字节流、字符流、读取写入文件、Copy文件、键盘输入输出、流操作的基本规律
- 学习心得:链表的操作(C语言实现)
- 分区表学习三:分区表实际操作心得
- redis学习心得之三-【java操作redis】
- 学习共享操作的代码及心得
- ant学习笔记(六)ant编译web项目,并打成war包,同时加入数据库操作
- 学习按位与操作的一些心得