Effective c++ 笔记

1。定义式的任务是提供编译器一些声明式所遗漏的细节。对对象而言,定义式是编译器为此对象拨发内存的地点。 对function或者 function template而言,定义式提供了代码本体。对class 或者 class template 而言,定义式列出他们的成员。

2. 所谓default构造函数是一个可被调用而不带任何实参者。这样的构造函数要不没有参数,要不就是每个参数都有省缺值。

3 . explicit 可以阻止类执行隐式类型转换,但是类依旧可以进行显示类型转换。

4 . copy 构造函数被用来 “以同型对象初始化自我对象”。 copy assignment 操作符被用来 “从另一个同型对象中拷贝其值到自我对象”。 当看到赋值符号时请小心,因为"="语法也可以用来调用copy构造函数:

Widget w3 = w2;

如果一个新对象被定义,一定会有一个构造函数被调用,不可能调用赋值操作。如果没有新对象被定义,就不会有构造函数被调用,那么当然是赋值操作被调用。

5. copy 构造参数定义了一个对象如何 passed by value(以值传递)。以 by value传递用户自定义类型通常是一个坏主意, pass-by-reference-to-const 往往是比较好的选择。

6. 绝对不要重新定义继承而来的non-virtual函数。

7. 绝不重新定义继承而来的省缺默认参数值。在继承一个带有缺省参数值的virtual函数时, virtual 函数系动态绑定,而缺省参数值却是静态绑定。 对象的所谓静态类型,就是它在程序中被申明时所采用的类型。对象的动态类型,指的是“目前所指对象对象的类型”。virtual 函数是动态绑定,而缺省参数却是静态绑定。意思是你可能会在“调用一个定义于derived class 内的 virtual 函数”的同时, 却使用 base class 为它所指定的省缺参数值。

8. 带多态性质的base classes应该声明一个virtual 析构函数。 class的设计目的如果不是作为base classed使用,或不是为了具备多态性,就不应该声明virtual析构函数。

9. 如果你调用new 时使用 [], 你必须在对应调用delete时也使用[], 如果你调用new时没有使用[],那么也不应该在对应调用delete时使用[];

 

posted on 2015-03-03 18:11  海上不夜星  阅读(155)  评论(0编辑  收藏  举报

导航