c++

reading 《Effective C++》

侯杰(译)

注释:斜体表示不理解的内容

第一章:让自己习惯c++

Item1:视c++为语言联邦(federation of languages)

c++的组成:
1. C语言:基础语法与内置类型;
2. objective-oriented c++:类及相关属性;
3. template c++:泛型编程;
4. STL:标准模板库中的containers、iterators、algorithms及function objects等。

总结:函数参数传递时:pass-by-value < pass-by-reference < pass-by-reference-to-const

Item2:尽量以const、enum、inline替换#define的使用

总结:对于单纯的常量,尽量以const、enum代替#define
     对于形式函数的宏(macros),最好用inline函数替换#define

Item3:尽量使用const提高效率

总结:尽量使用const可以帮助编译器检测出错误的用法;用const可以是函数接口更加明显;当const与non-const有实质性的等价时,可以用non-const调用const函数。

Item4:确定对象使用之前已经被初始化

1. 内置类型的初始化;
2. 类内的内置类型的初始化:一般在构造函数处初始化,在构造函数处用成员初始列初始化,而非在构造函数中以赋值的形式初始化。初始化顺序尽量与声明时的顺序一致。
3. *为了避免跨编译单元的初始化,用local-static对象替换non-local-static对象。*

第二章:构造/析构/赋值运算(constructors/destructors/assignment operators)

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

总结:c++构造了类之后,会默认构造一个copy构造函数、一个copy赋值操作符、一个析构函数。这些函数军事public且inline的。

Item6:若不想编译器自动生成的函数,则应该明确的拒绝

总结:将copy构造函数与copy赋值操作符声明为private并且不予实现。

Item7:为多态基类声明virtual析构函数

总结:有多态性质的基类应该有virtual析构函数;如果设计的类不是用于基类,那么久不应该声明virtual析构函数。

Item8:别让异常逃离析构函数

总结:1.析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们并且结束程序;
2.如果要对某个函数执行期间抛出的异常做出反应,那么class应该提供一个普通函数执行该操作,而不是在析构函数中执行该操作。

Item9:绝不在构造和析构过程中调用virtual函数

因为这类虚函数的调用绝不下降至派生类中。

Item10:令operator=返回一个reference to *this

Item11:在operator=中处理“自我赋值”

1.确保当对象自我赋值时operator=的良好行为。其中的技术包括比较:
    ①对象来源与目标对象的地址;
    ②精心周到的语句顺序;
    ③copy-and-swap
2.确保任何函数操作一个以上的对象时,而其中的多个对象是一个对象时,其行为仍然正确。

Item12:复制对象时,不要忘记其每个部分

copying性质的函数应该确保复制对象内的所有成员变量,基于其base class成分。
  • 31
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值