Effective C++ 第二章(读书笔记)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shenshen211/article/details/84501187

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

         编译器默认会产生四个函数:默认构造函数,默认析构函数,默认拷贝构造函数,默认复制操作符(即 “=” )

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

         为驳回编译器自动提供的机能,可将相应的函数声明为 private 并不予实现。使用像 Uncopyable 这样的 base class 也是一种做法。

07.为多态基类声明的虚拟析构函数

         带多态性质的 base class 应该声明一个 virtual 析构函数。如果 class 带有任何 virtual 函数,他就应该拥有一个 virtual 析构函数。

         Classes 的设计目的如果不是作为 base class 使用,或不是为了具备多态性,就不该声明 virtual 析构函数。

08.别让异常逃离析构函数

         析构函数绝对不要突出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下他们(不传播)或结束程序。

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

09.绝不再构造和析构过程中调用虚函数

         在构造函数和析构函数里不要调用 virtual 函数,因为这个类调用不会降至 derived class 。也就是说,不好起到你想要的那个结果,会产生不确定情况。

10.令操作=返回一个 reference *this

         这只是协议,并无强制性,但是推荐这样做。

11.在operations =中处理“自我赋值”

         确保当对象自我赋值时 operate= 有良好行为。其中技术包括比较“来源对象”和“目标对象”的地址,精心周到的语句顺序,以及 copy-and-swap。

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

12.复制对象时勿忘其每一个成分
         Coping 函数应该确保复制“对象内的所有成员变量”及“所有 base class成分”。

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

猜你喜欢

转载自blog.csdn.net/shenshen211/article/details/84501187
今日推荐