条款06:若不想使用编译器自动生成的函数,就该明确拒绝(Explicitly disallow the use of compiler-generated you do not want.)
2010-08-19 16:11
549 查看
1. 拒绝编译器自动生成的函数
可以将copy构造函数或copy assignment操作符声明为private。藉由明确声明一个成员函数,你阻止了编译器暗自创建其专属版
本;而令这些函数为private,使你得以成功阻止人们调用它。
为防止member函数和friend函数还是可以调用你的private函数。将成员函数声明为private而且故意不实现它们,那么如果某些
人不慎调用任何一个,会获得一个连接错误(linkage error)。
2. 将连接期错误移至编译期
class Uncopyable{
protected: //允许derived对象构造和析构
Uncopyable() {}
~Uncopyable() {}
private:
Uncopyable(const Uncopyable&);//但阻止copying
Uncopyable& operator=(coast Uncopyable&);
};
为求阻止HomeForSale对象被拷贝,我们唯一需要做的就是继承Uncopyable:
class HomeForSale: private Uncopyable //class不再声明copy构造函数或copy assign操作符
{
}
3 结论
1)为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class也是一种做法。
相关文章推荐
- 条款6:若不想使用编译器自动生成的函数,就该明确拒绝(Explicity disallow the use of compiler-generated functions you do not want)
- Item5: Explicitly disallow the use of compiler-generated functions you do not want--若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++_笔记_条款06_若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06: 若不想使用编译器自动生成的函数,就该明确拒绝
- effective c++ 6: Explicitly disallow the use of compiler-generated functions you do not want
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06 若不想使用编译器自动生成的函数 就该明确拒绝
- [Effective C++读书笔记]006_条款06_若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ 条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 《Effective C++》学习笔记条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- Item 6: Explicitly disallow the use of compiler-generated functions you do not want(Effective C++)
- 【条款6】Explicitly disallow the use of compiler-generated functions you do not want
- Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ 条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 《Effect C++》学习------条款06:若不想使用编译器自动生成的函数,就该明确拒绝