#define DISALLOW_EVIL_CONSTRUCTORS(TypeName)
TypeName(const TypeName&);
void operator=(const TypeName&)
class ScriptExtensionRegister {
public:
//
private:
//
DISALLOW_EVIL_CONSTRUCTORS(ScriptExtensionRegister);
};
如果我们实在不想编写拷贝构造函数和赋值函数,又不允许别人使用编译器生成的缺省函数,怎么办?偷懒的办法是:只需将拷贝构造函数和赋值函数声明为私有函数,不用编写代码。
例如:class A{ …private:A(const A &a); // 私有的拷贝构造函数A & operate =(const A &a); // 私有的赋值函数};如果有人试图编写如下程序:A b(a); // 调用了私有的拷贝构造函数b = a; // 调用了私有的赋值函数编译器将指出错误,因为外界不可以操作A 的私有函数。
当进行一个类的实例初始化的时候,也就是构造的时候,调用的是构造函数(如是用其他实例来初始化,则调用拷贝构造函数),非初始化的时候对这个实例进行赋值调用的是赋值运算符。