条款06:不想使用编译器自动生成的函数,就该明确拒绝
HomeForSale h1;
HomeForSale h2;
HomeForSale h3(h1); //不想产生h3(h1)的copy操作。也就是不自动产生copy函数
h1=h2; //不想产生h1=h2的copy assignment操作。也就是不自动产生copy assignment函数
class Uncopyable
{
protected:
Uncopyable() {} //允许derived 对象构造和析构
~Uncopyable() {}
private:
Uncopyable(Uncopyalbe&); //阻止copying
Uncopyable& operator=(const Uncopyable&);
};
class HomeForSale:private Uncopyable //class 不再声明copy构造函数或copy assign,操作符
{
......
};
当有人,或者是member函数或friend函数 尝试拷贝HomeForSale对象,编译器便试着生成一个copy 和copy assignment操作符,要产生他们就要调用base class的copy 和copy assignment函数,但由于是private继承。所以编译出错。
也可以直接把HomeForSale的copy和copy assignment直接放在private 下面,将会出现连接错误而不是编译错误。
阅读(513) | 评论(0) | 转发(0) |