Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43869
  • 博文数量: 25
  • 博客积分: 930
  • 博客等级: 准尉
  • 技术积分: 257
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-25 08:59
文章分类

全部博文(25)

文章存档

2010年(6)

2009年(18)

2008年(1)

我的朋友
最近访客

分类: C/C++

2009-04-20 21:01:06

条款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 下面,将会出现连接错误而不是编译错误。
阅读(477) | 评论(0) | 转发(0) |
0

上一篇:Effective C++ 笔记5.2

下一篇:Effective C++ 7.1

给主人留下些什么吧!~~