1.尽可能的延后变量定义式的出现时间
不止应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止。
如果这样不仅能够避免构造和析构非必要对象,还可以避免无意义的default构造行为。
2.尽量少做转型动作
尽量避免使用转型,特别是在注重效率的代码中避免Dynamic_casts。
如果转型是必要的,试着将它隐藏于某个函数背后。
尽可能使用新型转型(C++style)。
3.避免返回handle指向对象内部成分
避免返回handle(包括references、指针、迭代器)指向对象内部。
绝对不该令成员函数返回一个指针指向“访问级别较低”的成员函数。如果这么做了,后者的实际访问级别就会提高如同前者。
4.异常安全函数
带有异常安全性的函数会:不泄露任何资源、不允许数据败坏。
不泄露任何资源:以对象管理资源
不允许数据败坏:三种安全异常函数:基本承诺、强烈保证、不抛掷保证。
强烈保证往往能够以copy-and-swap 实现出来,但是强烈保证并非对所有函数都可实现或具备现实意义。
5.使用inlining
将大多数inlining限制在小型、被频繁调用的函数身上,这可使日后的调试过程和二进制升级更容易,也是潜在的代码膨胀问题最小化,使程序的速度提升机会最大化。
不要只因为function template出现在头文件中,就将他们声明为inline.
6.将接口从实现中分离
如果使用object references 或 object pointer 可以完成任务,就不要使用object;
如果能够,尽量以class声明式替代class定义式;
为声明式和定义式提供不同的头文件。