Effective C++阅读笔记①

一、让自己习惯C++

Accustoming Yourself to C++

01:视C++为一个语言联邦

View C++ as a federation of languages
简单总结可理解为C++包括以下内容:
①C语言部分
②Object-Oriented C++ 包括封装多态继承等机制
③Template C++ 泛型编程部分
④STL 即标准模板库,包含容器、算法、迭代器。

02:尽量以const,enum,inline替换#define

Prefer consts,enums,and inlines to #defines.
这是因为#define不被视为语言的一部分,不进入编译器,不进入记号表
对于单纯常量,最好用const对象或enums替换#define
对于形似函数的宏(macro),最好用inline函数替换

03:尽可能使用const

Use const whenever possible.
1、如果const出现在星号左边,表示被指物是常量,如果const出现在星号右边,表示指针自身是常量。如果出现在星号两边,表示指针和被指物都是常量。

2、在某些情况下,函数返回值也需要被定义为const,比如书中所说的有理数相乘。

3、及时调用了const修饰的成员函数,也可能改变对象的内容,比如修改了指针指向的内容。

04: 确定对象被使用前已被初始化

Make sure that objects are initialized before they’re used.
1、如果const出现在星号左边,表示被指物是常量,如果const出现在星号右边,表示指针自身是常量。如果出现在星号两边,表示指针和被指物都是常量。

2、在某些情况下,函数返回值也需要被定义为const,比如书中所说的有理数相乘。

3、及时调用了const修饰的成员函数,也可能改变对象的内容,比如修改了指针指向的内容。

构造/析构/赋值运算

Consructors,Destructors,and Assignment Opeartions


05: 了解C++默默编写并调用哪些函数

Know what functions C++ silently writes and calls.
编译器暗自为class创建了Default构造函数,copy构造函数,copy assigment操作符以及析构函数。唯有当这些函数被需要(被调用),它们才会被编译器创建出来。

06: 若不想使用编译器自动生成的函数,就应该明确拒绝

Explictly disallow the use of compiler-generated functions you do not want.

07: 为多态基类声明Virtual析构函数

Declare destructors virt in polymorphic base classes.
任何class只要带有virtual函数都几乎确定应该有一个virtual析构函数。
注意:STL容器都没有virtual析构函数,所以最好不要继承他们,否则可能会造成内存泄漏。

8、别让异常逃离析构函数

1、析构函数不要吐出异常,如果一个被析构函数调用的函数可能会抛出异常,析构函数应该捕捉任何异常,然后吞掉它们或结束程序。

2、如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非析构函数)执行该操作。

9、绝不在构造和析构过程中调用virtual函数

Never call virtual functions during construction or desruction
1、在构造和析构期间不要调用virtual函数,因为这类调用从不下降至derived class。

10、令赋值操作符返回一个reference to * this

*Have assignment operators return a reference to this

11、在operator =中处理“自我赋值”

Handle assignment to self in operator=
1、operator =要考虑“自我赋值”和“异常安全性”

2、确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。

12、复制对象时勿忘记其每一个成分

Copy all parts of an object.
1、Copying函数应该确保复制“对象内的所有成员变量”及“所有Base class成分”。

2、不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个coping函数共同调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值