`
冇心人
  • 浏览: 56420 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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 assignment操作符声明为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)
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics