您的位置:首页 > 编程语言 > C语言/C++

effective C++ 条款06如果你不想让编译器为你生成函数就应该明确拒绝

2013-04-27 21:04 459 查看
大千世界可定有独一无二的东西(对象),copy构造函数没存在的意义,所以我们就要防止编译器为我们生成copy构造函数,在条款05我们也曾经提过:当我们调用copy构造函数时如果没有定义,编译器会自动为我们生成,我们如何拒绝编译器的盛情呢?我们想到了把自己的类里,声明个private的copy构造函数和copy assignment,如下:

class HomeForeSale{

public:

private:
HomeForeSale(const HomeForeSale&);
HomeForeSale& operator=(const HomeForeSale&);


但是这又有一个问题,如果这两个函数不慎在成员函数和友员函数里被调用了,编译器不会捕捉到错误,相反连接器会发生抱怨。

如何将链接时的错误迁移到编译器呢,其实很简单我们只需要再为HomeForeSale声明一个基类,并把copy 构造函数和copy assignment 声明为private,并让HomeForeSale继承与它就行了,如下:

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

}

class HomeForSale:private Uncopyable{

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐