条款06:若不想使用编译器自动生成的函数,就该明确拒绝
编译器会为你的类自动生成函数,你若用不到就应该及时制止这种行为。
方法有俩个:
第一个是在里面自己声明相关函数但是不定义它们。里面只有声明。
class HomeForSale {
public:
...
private:
...
HomeForSale (const HomeForSale&); //只有声明
HomeForSale operator=(const HomeForSale&);
};
第二个方法是集成某个专门为了阻止copying动作设计的类,但这项技术可能会导致多重继承。
class Uncopyable {
protected:
Uncpoyable () {}
~Uncopyable () { }
private:
Uncopyable (const Uncpoyable&);
Uncopyable& operator=(const Uncopyable&);
};
class HomeForSale:private Uncopyable {
...
};
总结
为驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现。使用像Uncopyable这样的base class也是一种做法。