0 前言
1 类相关
- 不要在类的构造函数中进行针对于数据除初始化外的操作,可单列一个Initialize()函数。
- 在类中开辟动态地址空间时(new)需要进行delete,不要忘记写拷贝构造函数与重载=运算符。
- 写了构造函数带参数的还记得写一个默认的无参数构造函数,以便之后new该类的一个数组时候使用,仅有有默认构造函数的类可以new对象数组。
- 在类的函数中返回局部变量的对象时,不能使用引用操作&,只能返回该对象,因其引用没有办法被复制。其传递过程跟外面的接收过程是相关的:
1.声明一个变量来接受函数返回的局部变量时,函数返回的对象并没有被析构,直接就给到了声明的接收变量上。没有调用拷贝构造或者重载操作符等。
2.用另一个创建好了的对象来接收,会根据复制拷贝或者移动复制函数规则来进行。当有重载操作符=时会调用该操作。- 不要在类的声明中进行赋初值,应该在构造函数的内容里赋初值。在c++11中可以编译运行,但在c98中编译都无法通过。
- 单一参数的构造函数在以下的情况下可能会被隐式地调用:1. ClassA a=1 作为等号的初始化;2. 作为函数的参数 func(ClassA a)3.作为函数的返回值 ClassA func();如拷贝构造函数。因此可以使用关键字explicit修改构造函数防止被隐式地误用。
- 类中的静态成员变量必须在类外进行初始化的定义,否则编译不会报错,链接时会报未定义变量的错误。 如
int SigHandler::PipeQueueSize = 0;
2 Socket
- 在socket客户端和服务器都不要图省事,仅仅完成发送的代码不管接受;这样很容易导致没清缓冲区导致另一端无法发送数据而阻塞。
n 项目相关
- 查看项目的代码量:
(1)包括空行(会列出每个文件的代码行数):
find . “(” -name “.m" -or -name ".mm” -or -name “.c" -or -name ".h” -or -name “.xib" -or -name ".pch” “)” -print | xargs wc -l
(2)不包括空行(只会出现总行数):
find . “(” -name “.m" -or -name ".mm” -or -name “.c" -or -name ".h” -or -name “.xib" -or -name ".pch” “)” -print | xargs grep -v “^$”|wc -l