最近我读了几本关于VC和TCP/IP实现客户端和服务器端程序的书。有以下一些体会。
对于Effective C++这本书主要讲了内存管理,构造函数,析构函数和Assignment运算符。
如下:
1.尽量以const和inline取代#define Perfer const and inline to #define.
2.尽量以<iostream>取代 <stdio.h>,Perfer <iostream>to <stdio.h>
3.尽量以new 和delete 取代malloc and free.
4.尽量使用c++风格的注释形式
Prefer c++-style comment.
5.使用相同形式的new 和delete
user the same from in coresponding uses of new and delete .
6.记得在destructor 中以delete 对付pointer members
use delete on pointer members in destructors.
7.为内存不足的状况预做准备
Be prepared for out-of -mmory conditions.
8.撰写operator new 和operator delete时应遵行的公约
Adhere to convention when writing operator new and operator delete.
9.避免遮掩了new 的正规形式
Advoid hiding the "normal" form of new .
10. 如果你写了一个operator new ,请对应写一个operator delete
write operator delete if you write operator new .
11.如果class内动态配置有内存,请为此class 声明一个copy constrator 和一个assignment 运算符
Declare a copy constrator and an assignment operator for class with dynamically allocated in constructors.
12.在constructor 中尽量以initialization 动作取代assignment动作
perfer initialization to assignment in constrators.
13.initialization list中的members初始化次序应该和其在class 内的声明次序相同。
list members in an initialization list in the order in which they are declared.
14.总是让base class 拥有virtual destructor Make sure base classes have virtual destructors.
15.令operator=传回"*this的reference"
Have operator=return a reference to *this.
16.在operator=中为所有的data members 设定内容ASSIGN TO all data members in operator=.
17.在operator= 中检查是否“自己赋值给自己”check for assignment to self in operator=.
18.努力让接口完满且最小化。
Strive for class interface that are complete and minimal.
19.区分member functions,non-member function和friend functions三者
Differentiate among member functions,non-member functions,and friend functions.
20.避免将data member放在公开接口中。
Avoid data member in public interface.
21.尽量使用const
22.尽量使用pass-by-reference(传址)
23.当你必须传回object时,不要尝试传回reference.
24.在函数重载和参数缺省化之间,谨慎抉择。
25.避免对指针型别和数值型别进行重载。
26。防卫潜伏的ambiguity(模棱两可)状态。
27。如果不想使用编译器暗自产生的memberfunctions,就应该明白拒绝它。
28。尝试切割global namespace
29.避免传回内部数据的handles
30.避免写出member function,传回一个non-const pointer或reference并以之指向较低存取层级的member.
31.千万不要传回“函数内local对象的reference"或"函数内以new 获得的指针所指的对象"
32.尽可能延缓变量的定义式的出现。
33.明智的运用inlining.
34.将文件之间的编译依赖关系降至最低。
35.确定你的public inheritance,模塑出"isa"的关系。
36.区分接口继承和实现继承。
37 绝对不要重新定义继承而来的非虚拟函数
38.绝对不要重新定义继承而来的缺省参数值。
39.避免在继承体系中做向下转型动作。
40.通过layering 技术来模塑has-a 或is-implemented-in-terms-of的关系。
41.区分inheritance 和templates
42.明智地运用private inheritance
43.明智地运用多继承
44.说出你的意思并了解你所说的每一句话。
45.清楚知道C++默默为我们完成和调用哪些函数
46宁愿编译和连接时出错,也不要执行时才错
47.使用non-local static objects 之前先确定它已有初值
48.不要对编译器的警告信息视如不见
49 .尽量让自己熟悉C++标准程序库
50.加强自己对C++的了解.