首页 > C++编程 > 阻止编译器自动生成copy函数

阻止编译器自动生成copy函数

防止一个class被copy,而且将错误提前到链接阶段,可以将这个类的copy constructor和copy assignment操作符都声明为private而且不做定义。

class SomeClass
{
private:
	SomeClass(const SomeClass&);
	SomeClass& operator=(const SomeClass&);
public:
	//...
private:
	//...
};

防止一个class被copy,而且将错误提前到编译阶段,可以专门设计一个阻止copy动作的基类。

1
2
3
4
5
6
class Uncopyable
{
private:
	Uncopyable(const Uncopyable&);
	Uncopyable& operator(const Uncopyable&);
};

为了阻止某个对象如SomeClass被copy,我们唯一需要做的就是继承自Uncopyable:

1
2
3
4
5
6
7
class SomeClass : private Uncopyable
{
public:
	//...
private:
	//...
};

因为Uncopyable不含任何数据,符合EBO(empty base class optimization,空白基类最优化)资格,但由于它总是扮演base class,因此有可能导致多重继承,而EBO一般只在单继承下才可行,编译器通常不会对有多个base class的derived classes施行EBO。

但是不排除上述方法存在多重继承的可能性,那样可能有点让人担心。设计一个宏是一个较好的方案:

1
2
3
4
#define CLASS_UNCOPYABLE(classname) \
private:\
	classname (const classname&); \
	classname& operator=(const classname&);\

觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> 阻止编译器自动生成copy函数
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



分类: C++编程 标签: , , ,
  1. 本文目前尚无任何评论.