您的位置:首页 > 编程语言 > C语言/C++

Effective c++ 学习笔记(六)

2017-06-14 14:15 274 查看

条款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并且不予实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: