条款05:了解C++默默编写并调用哪些函数
请记住:编译器可以暗自为class 创建default构造函数、copy构造函数、copy assignment 操作符,以及析构函数。
但是如果成员变量中有const 或者& 编译器将拒绝执行copy构造函数和copy assignment 操作符。
如果base classes 将copy assignment 操作符声明为private ,编译器将拒绝为其derived classes 生成一个copy assignment 操作符。
条款06:若不想使用编译器自动生成的函数,就改明确拒绝
可以采用如下操作,声明一个base classes 屏蔽编译器自动生成的函数
class Uncopyable
{
protected:
Uncopyable(){} //允许derived 对象构造和析构
~Uncopyable(){}
private:
Uncopyable(const Uncopyable&); // 但阻止copying
Uncopyable& operator=(const Uncopyable&);
};
class HomeForSale:private Uncopyable
{
...
}
也可以在Boost 中有个名为noncopyable的class
请记住:为驳回编译器自动(暗自)提供的机能,可将相应的成员函数声明为private并且不予实现。使用想Uncopyable这样的base class 也是一种做法。