Effective C++ 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
2017-08-06 21:25
337 查看
规则一 将成员函数声明为private而且故意不实现他们
class HomeForSale { public: ... private: ... HomeForSale(const HomeForSale&); // 只有声明 HomeForSale& operator=(const HomwForSale&); // 只有声明 }
有的时候为了阻止copy构造函数或者copy assignment操作符,可以将他们声明为private,但是这个做法不绝对安全,因为member函数和friend函数还是可以调用private函数的。但是如果你只声明,不实现它们的话,当调用者调用的时候会报链接错误(linkage error)。
规则二 将链接错误移至编译期
class Uncopyable { protected: Uncopyable () {} // 允许derived对象构造和析构 ~Uncopyalbe () {} private: Uncopyable(const Uncopyable&); // 但阻止copying Uncopyable& operator=(const Uncopyable&); }; class HomeForSale: private Uncopyable { // class不再声明copy构造函数或copy assign.操作符 }
总结
为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为private并且不予实现。
使用像Uncopyable这样的base class也是一种做法。
相关文章推荐
- 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_若不想使用编译器自动生成的函数,就该明确拒绝 读书笔记
- 《Effect C++》学习------条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ 06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝(Explicitly disallow the use of compiler-generated you do not want.)
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06 若不想使用编译器自动生成的函数 就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝.