读书札记之 —— 《More Effective C++》

这本书没有《Effective C++》一书重要,但仍然值得一读。这是我看过最多的关于这本书 的评价。这个评价还算中肯,但是这句话面向的是初学者。这本书里面提到的很多技术估计 没有几年的开发经验应该不太可能用到,比如自己处理引用计数,自己设计代理类等等。如 果你是比较高阶(至少你自己是这么认为的)的C++程序员(嗯,或者你可以说自己是工程 师),这本书非常值得一看,因为里面设计的引用技术、字符代理、双分派问题都是近乎神 技,即使用不到这些技术,你依旧可以在这些代码中学到很多设计方面的新的思维。

还有很多人说这本书有点过时,这是实话,作者在书中提到模板、异常可能不受支持的问题 现在看来像是在开玩笑。但是作者写这本书的时候确实有这个问题,而且这些论断并不会影 响文中其他内容的讨论,所以认为这本书太老而不值得一读的人完全可以消除这个顾虑。唯 一的例外是关于异常规格(exception specification)的讨论确实有点过时,因为新的标 准中已经废弃的这一功能,但是阅读相关的内容会让你更容易理解为什么它会遭到废弃。

相关书籍

嗯,这是一本有一定难度的书。一般的人可能比较难以轻松的读完它,在阅读这本书之前我 建议大家先看看《设计模式》和《深度探索C++对象模型》两本书,当然你应该不会还没有 看过《Effective C++》就跑来看这本书吧,如果是,放下这本书吧,把《Effective C++》 看完两遍再来看这本也不迟。

这本书两面讨论的很多技术在《设计模式》和《深度探索》两本书中都有提到并且有更详细 和全面的讲解。读完这两本书再读文中的内容会比较轻松一些。当然不同的作者对于同一个 问题可能会有不同的看法,比如对于把析构函数声明成纯虚函数这一点,梅耶(本书作者) 好像比较推荐这么做但是李普曼(《深度探索C++对象模型》一书的作者)好像不太赞成这 么做。此外两书在讨论返回值优化的时候用的术语也不同,本书使用RVO而《深度》一书 使用NRV(深度探索一书中关于NRV和拷贝构造之间的关系不太准确,详见我的另一篇博文 深入探索C++对象模型一书中拷贝构造函数和NRV关系探讨 )。

这本书里面提到的很多模式和《设计模式》一书中的模式有些出入。比如虚拟构造函数在《 设计模式》一书中指的是“工厂方法”模式,而虚拟拷贝构造函数类似《设计模式》中的原型 模式但是侧重点不同,书中主要侧重拷贝的虚拟化而《设计模式》一书中侧重的则是通过拷 贝来创建对象。又比如设计模式中的代理和被代理者有相同的接口,强调两者无缝的替换性 而本书中的代理则更加的宽泛,并不要求接口一致,它更多的是强调使用代理封装原本功能 之外的一些功能,从这一点上看它更像是装饰者模式。

了解《设计模式》和《深度探索C++对象模型》两本书的内容会让此书的阅读更加的轻松, 同时也有更多的参考可供触类旁通。

总结

这本书本身就是作者经验的总结,所以这本书没有太多可以总结的东西。从书本身的角度来 看,难点主要在于效率和技术两章,读者可以慢慢的品味这两章的内容,必然受益无穷。