C++学习笔记 Uncopyable class_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C++学习笔记 Uncopyable class

C++学习笔记 Uncopyable class

 2010/9/19 23:30:37  冇心人  http://superwing.javaeye.com  我要评论(0)
  • 摘要:因为C++编译器默认会为你产出一份copyconstructor和copyassignment但你不想你的对象具有copy的功能,你的目标是要阻止copying!一般人会说只要声明privatecopyconstructor如下classHomeForSale{public:...private:HomeForSale(constHomeForSale&);HomeForSale&operator=(constHomeForSale&)有了上述的class定义
  • 标签:C学习笔记 Uncopyable class

因为C++编译器默认会为你产出一份 copy constructor 和 copy assignment 但你不想你的对象具有copy的功能,你的目标是要阻止copying!一般人会说只要声明 private copy constructor 如下

class HomeForSale{
public:
     ...
private:
     HomeForSale(const HomeForSale&);
     HomeForSale& operator=(const HomeForSale&)

?有了上述的class定义,当客户企图拷贝HomeForSale对象,编辑一会阻止他.如果你不慎在member函数或friend函数内那么做,轮到连接器发出抱怨.

讲连接器错误移至编译器是可能的.只要将copy constructor 和 copy assignmentcaozuofu.html" target="_blank">操作符声明为private,但不是在HomeForSale自身,而是在一个专门为了阻止copying动作而设计的base class内.如下

class Uncopyable
protected:
     Uncopyable() {}
     ~Uncopyable() {}
private:
     Uncopyable(const Uncopyable&);
     Uncopyable& operator=(const Uncopyable&);

?为了阻止HomeForSale对象的拷贝,我们唯一需要做的就是继承Uncopyable:

class HomeForSale : private Uncopyable
?这样是可行的,因为只要有任何人(甚至是member函数或friend函数试图拷贝HomeForSale对象,编译器便会试着生成一个copy constructor操作符,这些函数的"编译器生成版"会尝试调用其base class,那些调用会被编译器拒绝,因为其base class具有private constructor)
发表评论
用户名: 匿名