Effective C++ 读书笔记 条款06:若不想使用编译器自动生成的函数,就该明确拒绝

来源:互联网 发布:哈尔滨哪里有mac专柜 编辑:程序博客网 时间:2024/04/30 01:10

Core List

1. 禁止 copy 构造函数和 copy 赋值函数

(1) 声明函数为 private :客户无法使用 copy 函数。(编译器报错,但成员函数和友元函数仍可访问)

(2) 只声明,不定义:成员函数和友元函数无法使用。(链接器报错)


2. 继承 unCopyable 父类 (将报错从链接阶段提早到编译阶段)

class Uncopyable {

protected:

    Uncopy() {};

    ~Uncopy() {};

private:

    Uncopyable (const Uncopyable& );

    Uncopyable& operator= (const Uncopyable& ); // 阻止Uncopyable 对象的拷贝行为

}


class HomeForSale:private Uncopyable {   ...    }

注:

编译器将自动生成拷贝函数,且“编译器生成版”会调用其 base class 的对应函数,由于基类的函数为 private, 因此此调用会被编译器拒绝,在编译阶段报错。


0 0