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并且不予实现。相关文章推荐
- Effective C++学习笔记:条款3:尽量用new和delete而不用malloc和free
- Effective C++ 学习笔记:为含指针变量的类声明一个拷贝构造函数和一个赋值操作符
- Effective c++学习笔记
- effective C++学习笔记
- 尽量使用new/delete操作符,而不是malloc/free来分配内存-------Effective C++学习笔记
- Effective C++学习笔记:条款1:尽量用const和inline而不用#define
- Effective C++学习笔记 第三弹 11-18
- Effective C++ 学习笔记(2)
- 宁以non-member-and-non-friend替换member函数——effective c++学习笔记
- Effective C++学习笔记 第一弹 1-4
- Effective C++学习笔记:尽量使用初始化而不要在构造函数里赋值
- Effective C++学习笔记:尽量用“传引用”而不用“传值”
- Effective C++ 学习笔记:让operator=返回*this的引用
- 为“异常安全的努力”是值得的——effective c++学习笔记
- Effective C++ 第一章学习笔记
- Effective C++学习笔记:写operator new和operator delete时要遵循常规
- Effective C++学习笔记:分清成员函数,非成员函数和友元函数
- Effective C++学习笔记:确定基类有虚析构函数
- Effective C++学习笔记之“尽量使用初始化而不要在构造函数里赋值”
- Effective C++学习笔记 第二弹 5-10