Effective c++ 学习笔记(六)

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

阻止拷贝的关键是:由于所有编译器产出的函数都是public,可以将拷贝构造函数和拷贝运算符声明为private。明确声明一个成员函数,可以阻止编译器自动创建其专属版本,而令这些函数为private,可以阻止用户调用它。
class  Home {
    
private:
    Home &operator = (const  Home &rhs);
    Home(const  Home &rhs);
};
当用户拷贝Home对象,编译器会报错。
为阻止拷贝动作而设计的基类
class  Uncopy {                                        
protected:
    Uncopy () { }                     //允许派生类对象构造和析构
    ~ Uncopy () { }                                    
private:
    Uncopy &operator = (const  Uncopy &rhs);      //拷贝运算符
    Uncopy (const  Uncopy &rhs);                 //拷贝构造函数
};
class Home: private  Uncopy{       // Home对象禁止被拷贝

};
禁止用户拷贝Home对象时,继承Uncopy类。试图拷贝Home对象时,编译器便试着生成一个拷贝构造函数和拷贝操作符,这些函数尝试调用其基类对应的函数,这些调用会被拒绝,因为基类的拷贝函数是private。

总结

为了阻止编译器自动生成拷贝函数和拷贝操作符,可以将相应的成员函数声明为private并且不予实现。

猜你喜欢

转载自blog.csdn.net/liyazhen2011/article/details/73224522