effective C++ 06_若不想使用编译器自动生成的函数,就该明确拒绝 读书笔记
2017-12-19 15:15
274 查看
作者推荐的做法是制作一个Uncopyable类,然后不想要copy构造函数和copy assignment操作符的类继承这个Uncopyable类。
这样如果有函数里妄图使用该类的构造函数,在编译阶段就会直接报错。
如果自己类里面把copy构造函数和copy assignment操作符声明为private,并且不定义它,也是可以的。但是相比上面提到个Uncopyable类技术,编译器报错的阶段是链接期,是晚于编译期的。 作者提到愈早侦测出错误愈好,所以更推荐的是Uncopyable类技术。
这样如果有函数里妄图使用该类的构造函数,在编译阶段就会直接报错。
如果自己类里面把copy构造函数和copy assignment操作符声明为private,并且不定义它,也是可以的。但是相比上面提到个Uncopyable类技术,编译器报错的阶段是链接期,是晚于编译期的。 作者提到愈早侦测出错误愈好,所以更推荐的是Uncopyable类技术。
class Uncopyable { protected: Uncopyable() {} //定义为protected,允许derived对象构造和析构 ~Uncopyable() {} private: Uncopyable(const Uncopyable&); //定义为private,阻止copying Uncopyable& operator=(const Uncopyable&); }; //唯一要做的就是继承Uncopyable: class HomeForSale: private Uncopyable { ... };
相关文章推荐
- 读书笔记《Effective C++》条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ 06 若不想使用编译器自动生成函数,就该明确拒绝 笔记
- Effective C++ 条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- [Effective C++]条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++:条款06:若不想使用编译器自动生成的函数,就该明确拒绝。
- Effective C++ 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ -----条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 读书笔记《Effective c++》 条款06 若不想使用编译器自动生成的函数,就应该明确拒绝
- Effective C++_笔记_条款06_若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ 06:若不想使用编译器自动生成的函数,就该明确拒绝
- 《Effective C++》学习笔记条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06 若不想使用编译器自动生成的函数 就该明确拒绝
- 条款06: 若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝
- 【06】若不想使用编译器自动生成的函数,就该明确拒绝
- 读书笔记_Effective_C++_条款六:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ 条款6——若不想使用编译器自动生成的函数,就该明确拒绝
- [Effective C++读书笔记]006_条款06_若不想使用编译器自动生成的函数,就该明确拒绝