1.让自己习惯C++
条款 01:视C++为一个语言联邦
条款 02:尽量以const, enum, inline替换 #define
或者说 宁可以编译器替换预处理器。
1.const
2.enum
3.inline
条款03:尽可能使用const
1.基本用法
2.位置变了,含义未变
3.const成员函数
const对象只能调用const成员函数
4. const vector<int>::iterator与vector<int>::const_iterator。类似int* const p与const int* p
5.成员函数常量性不同可以重载
6
7.bitwise const不准更改对象内任何一个bit
8.const成员函数不能调用non-const成员函数,要用const_cast解决
条款04:确定对象被使用前已先被初始化
- C++不同的组成部分初始化规则不同
2.成员初始化列表效率更高
下面方法调用了default构造函数设初值然后赋值
3.多个构造函数存在许多成员变量
4.初值列次序最好总以声明为次序。
5.解决无法确定不同编译单元内non-local static对象的初始化相对次序
6.解决non-const static在多线程下等待某事发生的麻烦
2 构造/析构/赋值运算
条款05 : 了解C++默默编写并调用哪些函数
1.
条款 06 若不想使用编译器自动生成的函数,就应该明确拒绝
1.将一些自动生成的函数声明为private并且不去定义
但不是对其本身操作,而是让其继承一个组织copying的base class
条款 07 : 为多态基类声明virtual析构函数
1.局部销毁对象形成资源泄漏,败坏数据结构,浪费调试时间
2.析构函数调用顺序
条款08 : 别让异常逃离析构函数
1.析构函数吐出异常,程序可能过早结束或者出现不明行为。为了避免这种情况出现可以强迫程序结束,或者吞下异常。
条款 09 : 绝不在构造和析构过程中调用virtual函数
1.此条款不适用于java或c#
2.
条款 10 : 令operator= 返回一个reference to *this
条款 11 : 在operator= 中处理"自我赋值"
1.证同测试与令指针指向一个副本
条款12:赋值对象时勿忘其每一个成分
1.
3 资源管理
条款13:以对象管理资源
1. auto_ptr不同寻常的复制操作
2.引用计数型智慧指针(RCSP)
条款14:在资源管理类中小心copying行为
1.
2.
条款15:在资源管理器中提供对原始资源的访问
条款16:成对使用new和delete时要采用相同的形式
1.
条款17:以独立语句将newed对象置入智能指针