摒弃C的做法采用C++的实现方式

  1. 以const和inline代替define
  2. 以iostream流代替stdio
  3. 以new和delete代替
  4. C++风格注释

内存管理

  1. new和delete, new[] delete[]
  2. 析构函数要销毁掉类的动态内存分配,防止内存泄漏

7-10其他问题

构造、赋值、拷贝构造

11.初始化时的=表示拷贝构造,其他时候表示赋值运算符。如果在class中有动态的内存分配,则不能使用默认的拷贝构造和赋值预算法,需要重写。

12.尽量用初始化代替函数类变量赋值:一是效率更高,二是const变量只能初始化而不能赋值。

13.构造函数的初始化顺序与类的成员变量定义的顺序相一致,目的是析构顺序与类的成员变量的构造顺序相反。如果不是按照这个顺序赋值,那么类需要其他的方式记录每个变量的赋值顺序,这样就增加了开销。

14.Base class尽量virtual function。

15-17 =运算符相关

类与对象

18.类的成员函数完整且最小化

19. member function non-member function和 friend function区别

20. 避免将data member放在public中,安全?

21. 尽可能使用const

22. 尽可能传递引用而不是传值:效率高?避免拷贝构造?

23. 函数重载与缺省参数的选择?

25. 避免对指针的类型的重载

26. 造成模棱两可的情况,比如:即使Base1、Base2的参数和返回值不一样,仍然会造成类型不匹配的问题。比如:

D d;  d.dot   //error 模棱两可

即使使用了private限制符仍会出错

27. 如果不想使用编译器默认生成的member function,那么可以显示的禁止它,比如赋值运算符=,将其直接声明为private即可。这一点与Google编程指南倒是很相似。

28. 命名空间

31. 不要传回new的对象:无法析构和本地变量的引用:返回的时候被析构

35.  面向对象的public继承代表is-a的关系:比如:鸟之于鸡,动物之于爬行动物之类的关系

37. 将子类需要重写(覆盖)的函数声明为虚函数,以实现RTTI

38. 虚函数不能有默认参数:因为默认参数会静态绑定,而虚函数是动态绑定

39. 不要向下转型

40.用has-a 实现层次关系,比如计算机包括CPU主板 内存等部分,这些类都是计算机的组成部分,而不能说是计算机继承了这些class.反倒是可以说计算机继承了单片机。这些类的成员变量和普通的局部变量一样,会自动析构而不用手动delete

Effective C++ 学习总结的更多相关文章

  1. Effective STL 学习笔记 39 ~ 41

    Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  2. Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value

    Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...

  3. Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据

    Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...

  4. Effective STL 学习笔记 32 ~ 33

    Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  5. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  6. Effective STL 学习笔记 Item 30: 保证目标区间足够大

    Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...

  7. Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor

    Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div ...

  8. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

  9. Effective STL 学习笔记 Item 21:Comparison Function 相关

    Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...

  10. Effective STL 学习笔记:19 ~ 20

    Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

随机推荐

  1. Android动态加载so文件

    在Android中调用动态库文件(*.so)都是通过jni的方式,而且往往在apk或jar包中调用so文件时,都要将对应so文件打包进apk或jar包,工程目录下图: 以上方式的存在的问题: 1.缺少 ...

  2. POJ-1151 Atlantis 矩形面积并

    题目链接:http://poj.org/problem?id=1151 扫描线+离散+线段树,线段树每个节点保存的是离散后节点右边的线段. //STATUS:C++_AC_16MS_208KB #in ...

  3. 大型网站应用中MySQL的架构演变史

    没有什么东西是一成不变的,包含我们的理想和生活!MySQL作为一个免费的开源的关系型数据库,深受大家喜爱,从最初的无人问津到当下的去IOE,都体现出了MySQL举足轻重的作用.今天我们就从淘宝的发展来 ...

  4. c++ template笔记

    1. 数组 template <typename T, int N> void array_print(T (&arr)[N]) { for(int i = 0; i < N ...

  5. 使用Camstudio和KeyCastOW来录屏制作软件Demo视频

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:使用Camstudio和KeyCastOW来录屏制作软件Demo视频.

  6. linux下.run文件的安装与卸载

    linux下.run文件的安装与卸载   .run文件的安装很简单,只需要为该文件增加可执行属性,即可执行安装 以 virtualbox 的安装文件 virtualbox-3.1.6-59338-Li ...

  7. java list&lt;string&gt;组 传递到值js排列

    方法一 后台:     String sql = "select * from tree";     list = this.treeService.getTreeList(sql ...

  8. iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)

    新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置. UIColor+Hex.h文件, #import <UIKit/UIKit.h> # ...

  9. Java的递归算法

    递归算法设计的基本思想是:对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到可以直接求解,也就是说到了递推的出口,这样原问题就有递推得解. 关键要抓住的是: (1) ...

  10. Linux 汇编语言开发指南

    http://www.ibm.com/developerworks/cn/linux/l-assembly/