effect C++ 若不想使用编译器自动生成的函数,就该拒绝
来源:互联网 发布:matlab 数据拟合 编辑:程序博客网 时间:2024/06/05 09:57
阻止copying
所有的编译器产出的函数都是public。为阻止这些函数被创建出来,得自行声明它们。将copy构造函数或copy assignment操作符声明为private。阻止了编译器暗自创建其专属版本。
一般这个做法并不安全,因为friend和member 还是可以调用。所以,将成员函数声明为private而且故意不实现它们。
class HomeForSale{public:...private:...HomeForSale(const HomeForSale&); //只有声明HomeForSale&operator=(const HomeForSale&);};当客户企图拷贝HomeForSale对象,编译器会阻挠他。如果在member函数和friend函数内那么做,轮到连接器发出抱怨。
使用base class
将连接期间错误移至编译期是可能的,在一个专门阻止copying动作而设计的base class将copy构造和copy assignment 操作符声明为private
class Uncopyable{protected: Uncopyable(){} //允许derived对象构造和析构 ~Uncopyable(){} private: Uncopyable (const Uncopyable&); //阻止copy Uncopyable&operator=(const Uncopyable&);} //继承Uncopyabkeclass HomeForSale:private Uncopyable{ ... //class 不再声明copy构造或copy assign操作符}因为其 base class 的拷贝函数是private,只要任何人尝试拷贝HomeForSale对象。就会被编译器拒绝。
为驳回编译器自动提供的机能,可将相应的成员函数声明为private 并且不予实现。
使用像Uncopyable 这样的base class 也是一种做法。
0 0
- effect C++ 若不想使用编译器自动生成的函数,就该拒绝
- 《Effect C++》学习------条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++:条款06:若不想使用编译器自动生成的函数,就该明确拒绝。
- [Effective C++]条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- 条款6:若不想使用编译器自动生成的的函数,就该明确拒绝
- 《Effective C++》学习笔记条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- 读书笔记《Effective C++》条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝.
- 条款06: 若不想使用编译器自动生成的函数,就该明确拒绝
- 条款6:若不想使用编译器自动生成的函数,就该明确拒绝
- 若不想使用编译器自动生成的函数,就该明确拒绝
- 若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ Item 6 若不想使用编译器自动生成的函数,就该明确拒绝
- 条款6:若不想使用编译器自动生成的函数,就该明确拒绝
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
- Effective C++ 条款06 若不想使用编译器自动生成的函数,就该明确拒绝
- tip6:若不想使用编译器自动生成的函数,就该明确拒绝
- 安装Hadoop及Spark(Ubuntu 16.04)
- Angular 2的管道Pipe
- fl2440——驱动入门,hello world!
- linux 编程问题
- 关于MSP430中断机制
- effect C++ 若不想使用编译器自动生成的函数,就该拒绝
- 1067. 试密码(20) PAT 乙级
- Linux文件特殊权限之set位权限和粘滞位权限
- java异常捕获
- 更改Ubuntu的语言
- Android权限
- 关于一些Vue的文章。(3)
- error: stray '\302' in program?
- 观察者模式