Effective C++阅读笔记

Effective C++

1、让自己习惯C++

1、C++是四个语言组成的,每个语言有自己的规则。(四种语言:Plain C(面向过程)、OOP(面向对象)、模板(泛型和模板元编程)、STL(C++标准库))

2、尽量以inline、enum、const代替#define。

3、灵活使用const前缀。不需要进行改变的数据加上const前缀。指针的const前缀有两种形式,const放在*左边表示数据不变,放右边表示指针地址不变。返回不需要修改的成员数据的成员函数需要加上const标记。(成员函数+const:1、不可以改变non-static成员变量;2、操作const对象/const+ 类可以访问)

4、使用对象前确保初始化:简单的内置数据结构(POD),尽量手工初始化。建议:使用成员初始列,保持顺序)。请以local static 代替non-local static 对象。

2、构造/析构/赋值运算

5、了解C++暗地里编写和调用了什么函数。类会自动生成default 构造函数,copy 构造函数和copy assign函数,如果不明确定义拷贝构造函数,那么类对象拷贝的时候只进行浅拷贝操作,有可能与原有意图不符。因此需要明确定义这些函数,不让C++编译器自动生成。

6、可以拒绝使用编译器生成的默认函数。方法是把这些默认函数放到private里面,这样程序就无法使用默认函数了。

7、为多态基类声明virtual析构函数。如果基类没有定义virtual析构函数,那么当我们用基类指针指向derived 对象,通过基类指针析构derived对象,无法调用derived对象的析构函数。所以要预先为base类编写virtual 析构函数,这样基类和派生类都会执行析构函数。STL不是完全的面向对象思想,比如没有虚析构函数,因此不能以STL类为基类实现多态。

8、别让异常逃离析构函数。在处理异常之前,先要保证资源都析构了,不然会发生资源泄露导致bug;如果不行,那么终止程序是最保险的办法。保证资源析构的可行的办法使用资源管理类或者智能指针管理资源。

9、绝不在构造和析构中调用virtual函数。在base class构造期间,virtual函数不是virtual函数。derived实例构造时,base构造部分如果调用virtual函数,则调用的是base类的virtual函数而不是derived类的virtual函数。

10、令operator=返回一个reference to *this。这是标准,很多人会忘记。

11、在operator=中处理“自我赋值”。判断参数是不是本身,如果是本身,就直接返回,不要做没用的事情。

12、copying函数应该确保复制"对象内的所有成员变量"及"所有的base成分"。copy构造和copying操作符不要有相互调用实现,可以把共同的技能放进第三个函数,两个可以同时调用。

3、资源管理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值