Effective C++ 学习总结

摒弃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

 

转载于:https://www.cnblogs.com/shenshenlei/p/5497967.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值