Effective-C++
C++
封装
继承
C++类的继承比现实世界中的继承关系更加严格:任何适用于父类的性质都要适用于子类!
Effective-C++
C++
编译依赖
接口类
虚函数
最小化编译依赖的一般做法是依赖于声明而非定义,这个想法可以通过句柄类或接口类来实现。库的声明应当包括“完整的”和“只有声明的”两种形式。
Effective-C++
C++
inline
宏
模板
inline(内联函数)避免了宏的缺点,也不需要付出函数调用的代价。也方便了编译器基于上下文的优化。但inline函数可能会造成目标代码膨胀和指令缓存的Miss。
Effective-C++
C++
内存
异常
指针
线程
智能指针
异常安全是指当异常发生时,不会泄漏资源,也不会使系统处于不一致的状态。通常有三个异常安全级别:基本保证、强烈保证、不抛异常(nothrow)保证。
Effective-C++
C++
内存
封装
引用
这里的“句柄”(handle)包括引用、指针和迭代器。这样可以增加类的封装性、使得`const`函数更加`const`,也避免了空引用的创建(dangling handles)。
Effective-C++
C++
类型转换
运算符重载
类型检查
C++的类型检查只在编译时执行,运行时没有类型错误的概念。理论上讲只要你的代码可以编译那么就运行时就不会有不安全的操作发生。但C++允许类型转换,也正是类型转换破坏了理论上的类型系统。
Effective-C++
C++
作用域
构造函数
析构函数
这一规则在任何编程语言中都适用,一方面可以避免无用的构造使得程序更高效,另一方面作用域的缩小会使程序更加清晰。