2007年8月3日星期五

《C++沉思录》阅读笔记(5)

1.在一个具有继承关系的类群中使用容器会遇到许多在使用内在类型(元类型)时所不会遇到的问题,因为机器是不了解它要处理的问题的规模是多大。它像一个满脸青春痘的少年面对制定一个跨国企业下年度财务预算报表时一样茫然无措。这并不是说少年不够聪明,而是他没有多少经验。即便对于一个经过多年磨炼的人来说,面对一个无法预测边界的工作时,他多少也会紧张。
2.将继承与容器共用,迫使我们要处理两个问题:控制内存分配和把不同类型的对象放入同一个容器中。这其实是一个RTTI问题。在C++中的语言层次,并没有提供一个完善的RTTI解决方案,但其确提供了解决该问题的工具。可惜地是,该问题是OOP中最常见也是最难于理解的问题,故后来的Delphi、Java、C#等都将RTTI作为语言级机制内化起来。这固然为新手入门带来很多好处,并能大幅提高软件工业的生产效率。但软件生产是一个如此特殊的产业,了解RTTI等底层技术的人的产能可能是一般新手的几百倍。或许其只是在产生了形式上的"效率提高"的繁华,而实际整体并没有太多增长。
3.在容器中应该使用代理对象而不是对象本身。
4.在编辑器中手工编写一下代码,有时不需要编译就可以理解作者意图,而单纯阅读总像"雾里看花"。
5.不应该接受对象,而应该接受对象指针或者引用。这虽然带来显而易见的效率优势,也带来棘手的问题,因为使用对象指针比直接使用对象要困难,未初始化的指针是非常危险而且没有什么简单办法可以防范。所以要在其间增加一个代理类,将指针管理封装起来,这样就有效隔绝了指针问题的蔓延。
6.Handle类的实现越看越和COM机制相似,或许COM的实现就是采用这样的技术。
7.Copy on write技术能有效提高效率,在编写完成代码后,应该用该技术优化既有代码。

0 评论: