Timothy

链接

《More Effective C++》------ ( 3 )
《Exceptional C++》------ ( 1 )

《More Effective C++》------ ( 4 )

Timothy posted @ 2010年6月10日 20:27 in Reading Notes , 1090 阅读

条款21:通过重载避免隐式转换

(1):C++规定,重载operator时,必须有一个用户自定义类型,即内建类型不允许修改默认的操作符意义。

(2):通过多种形似的操作符重载函数,明确声明需要的类型,可以避免隐式类型转换。

 

条款22:考虑运算符的赋值形式( op= ),代替它的单独形式( op )

(1):把 +, - 通过+=, -=来实现, a), 易于维护,只需要维护+= 和 -= 代码 b) +=, -=是效率更高的类型

 

条款23:考虑变更程序库

 

条款24:理解virtual function, multi derived, virtual base 和 RTTI所需要的代价

(1):虚函数的代价: a) 类多出来一个 vurtual table空间消耗,  实现时, vtbl是否在编译的obj中具现,一是在使用类的所有obj中具现 二是在包含该类的第一个非内联非纯虚 虚函数的实现体。   b) 类对象必须携带以个 vurtual table pointer。  c) 虚函数放弃了 inline 功能。 (动态函数和静态替换时冲突的)

(2):多继承和虚基类的代价: 除了携带自己的vtbl外,还得为基类携带一些特殊的vtbl。

(3):RTTI的代价: 在vtbl的 0 位置,存储了类的 type_info的地址。( 一般化实现方法)

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------

技巧( Techniques, 又称Idioms or Pattern )

 

 

条款25:将构造函数和非成员函数虚拟化

(1):一种虚拟技巧, 用以个非虚拟函数,去调用一个private或者protected的虚拟函数。

 

条款26:限制类产生的对象的个数

(1):对象0个或者1个.....Singleten模式。  隐藏构造函数,采用局部静态变量出现

(2):带有局部静态变量的函数,不要使用Inline,   内部链接的函数,可能引起引起复制(包括了局部静态变量)。

(3):对象所处的三个环境: 普通类对象,作为其他类的基类,被其他类包容。

(4):引用计数思想

 

条款27:要求或者禁止在堆中产生对象

(1):禁止在栈中创建对象: 把析构函数设为 private。但是必须提供成员函数delete。

   class COnlyHeap

{
public:
    COnlyHeap() {}
    void Destroy()
    {
        delete this;
    }

private:
    ~COnlyHeap() {}
}

 (2):禁止在堆中创建对象:隐藏掉 operator new() && operator delete()


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter