摘要: 条款49:了解new handler的行为 new异常会发生什么事? 在旧式的编译器中,operator new分配内存失败的时候,会返回一个null指针。而现在则是会抛出一个异常。 而在抛出这个异常之前,还会先调用一个客户指定的错误处理函数: 所谓的new handler: set_new_han 阅读全文
posted @ 2018-10-02 11:14 _NewMan 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 条款44: 将与参数无关的代码抽离template 如果使用template不当,可能会导致代码膨胀(code bloat): 其二进制码带着重复(或几乎重复)的代码、数据、或两者。但是源码看起来合身而整齐,目标码却不是那么一回事了。 例如一个求逆矩阵的类: template class Squar 阅读全文
posted @ 2018-10-01 21:50 _NewMan 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 条款41:了解隐式接口和编译期多态 从一个函数解读隐式接口和编译期多态: template void doProcessing(T &w) { if(w.size() 10 && w != someNastyWidget) { T temp(w); temp.normalize(); temp.sw 阅读全文
posted @ 2018-09-27 10:54 _NewMan 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 条款38:根据复合塑模出has a或者“根据某物实现出” 一、复合的概念 复合,是类型中的一种关系,指个某种类型的对象内含它种类型的对象的成员变量。 复合还称为分层(layering),内含(containment),聚合(aggregation)和内嵌(embedding). 二、区别is a和h 阅读全文
posted @ 2018-09-25 16:30 _NewMan 阅读(265) 评论(0) 推荐(0) 编辑
摘要: 条款35:考虑virtual函数以外的其他选择 在这个条款里面讨论virtual函数的替代方案。文中主要探讨了两种方式——NVI手法(Template Method模式)和Strategy模式。 一、NVI手法 NVI即Non Virtual Interface。是Template Method设计 阅读全文
posted @ 2018-09-25 14:41 _NewMan 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 条款32:确定你的public继承塑模出is a关系 is a即“是一种”的关系,比如Drive继承自Base,那么我们有: + 每一个Derive对象都是Base对象。Base对象可以派上用场的地方Derive照样可以。 + 但是Derive可以派上用场的地方,Base却无法效劳。因为Derive 阅读全文
posted @ 2018-09-24 10:47 _NewMan 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 条款28:避免返回handles指向对象内部成分 通常我们说的内部成分就是它的成员变量或者非public的成员函数。 一、为何要做此避免 书上的例子很好的解释了为什么不返回对象内部成分。 首先有一个坐标类, class Point { public: Point(int x, int y); voi 阅读全文
posted @ 2018-09-21 14:00 _NewMan 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 概述 本章讲述代码的实现细节。包括: + 变量的定义时机。太快变量的定义往往会造成效率上的拖延。 + 过度转型。过度的转可能导致代码变得又慢又难维护,以及微妙的难以理解的错误。 + 返回对象“内部数据之号码牌”会破坏封装以及产生“虚吊的号码牌”。 + 异常引起的资源泄漏,数据败坏。 + 过度inli 阅读全文
posted @ 2018-09-20 15:39 _NewMan 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 条款24:若所有的参数皆需类型转换,请为此采用non member函数 对于能够隐式转换的,我们要得知其危险性。否则将会发生你从未考虑到的错误。用我们一直在用的分数相乘的例子来看: class Rational { public: Rational(int numberator = 0, int d 阅读全文
posted @ 2018-09-20 09:47 _NewMan 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 条款21:必须返回对象时,别妄想返回其reference 看下面这个类,是一个表现分数相乘的class: class Rational { public: Rational(int numerator = 0, int denominator = 1); const Rational operato 阅读全文
posted @ 2018-09-18 15:46 _NewMan 阅读(210) 评论(0) 推荐(0) 编辑