摘要:第1章 跟踪范例 第2章 构造函数和析构函数 第3章 虚函数 1. 虚函数造成的性能损失 第4章 返回值优化 任何时候只要跳过了对象的创建和清除,就将会获得性能上的收益。返回值优化RVO(Return Value Optimization)是由编译器实现的优化,它用于加速源代码,是通过对源代码进行转化并消除对象的创建来实现的。 1. 按值返回的构造 下面是Complex类: classComplex{friendComplexoperator+(constComplex&,constComplex&);public:Complex(doubler=0.0,doublei=0.0 阅读全文
posted @ 2012-08-19 21:54 Mr.Rico 阅读 (398) 评论 (0) 编辑
摘要:条款1:指针与引用的区别 条款2:尽量使用C++风格的类型转换 条款3:不要对数组使用多态 条款4:避免误用的缺省构造函数 条款5:谨慎定义类型转换函数 隐式转换的实现方式:单参数构造函数和隐式类型转换操作符。 条款6:自增,自减操作符前缀形式和后缀形式的区别 条款7:不要重载&&,||或, 条款8:理解各种不同含义的new和delete new 操作符(new operator)和new 操作(operator new)的区别。 new操作符调用一个函数来完成必要的内存分配,你能够重写或重载这个函数来改变这个行为。new操作符为分配内存所调用的函数名字是operator ne 阅读全文
posted @ 2012-08-19 21:49 Mr.Rico 阅读 (177) 评论 (0) 编辑
摘要:条款01:视C++为一个语言联邦 条款02:尽量以const,enum,inline替换#define 条款03:尽可能使用const 条款04:确定对象使用前先被初始化 条款05:了解C++默认编写并调用哪些函数 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 条款07:为多态基类声明virtual析构函数 条款08:别让异常逃离析构函数 1. 编译单元 为免除"跨编译单元之初始化次序"问题,请以local static 对象替换non-local static对象。为免除"跨编译单元之初始化次序"问题,请以local static 对象替换n 阅读全文
posted @ 2012-08-19 21:47 Mr.Rico 阅读 (114) 评论 (0) 编辑
摘要:这是摘自《More Effective C++ 2007》条款27:要求或禁止在堆中产生对象要求在堆中建立对象 让我们先从必须在堆中建立对象开始说起。为了执行这种限制,你必须找到一种方法禁止以调用"new"以外的其它手段建立对象。这很容易做到。非堆对象(non-heap object)在定义它的地方被自动构造,在生存时间结束时自动被释放,所以只要禁止使用隐式的构造函数和析构函数,就可以实现这种限制。把这些调用变得不合法的一种最直接的方法是把构造函数和析构函数声明为 private。这样做副作用太大。没有理由让这两个函数都是 private。最好让析构函数成为 private 阅读全文
posted @ 2012-08-19 14:21 Mr.Rico 阅读 (446) 评论 (0) 编辑
摘要:这是摘自《More Effective C++ 2007》 条款24:理解虚函数,多重继承,虚基类和RTTI所需的代价 当调用一个虚拟函数时,被执行的代码必须与调用函数的对象的动态类型相一致;指向对象的指针或引用的类型是不重要的。编译器如何能够高效地提供这种行为呢?大多数编译器是使用 virtual table 和 virtual table pointers。virtual table 和 virtual table pointers 通常被分别地称为 vtbl 和 vptr。 一个 vtbl 通常是一个函数指针数组。(一些编译器使用链表来代替数组,但是基本方法是一样的)在程序中的每个类只要 阅读全文
posted @ 2012-08-19 13:45 Mr.Rico 阅读 (538) 评论 (0) 编辑