要禁止复制或分配类,通常的做法是创建复制构造函数 和赋值运算符私有(private)。 Google 和 Qt 都有宏来使这变得容易和可见。 这些宏是:
谷歌:
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)
Qt:
#define Q_DISABLE_COPY(Class) \
Class(const Class &); \
Class &operator=(const Class &);
问题: 为什么两个赋值运算符的签名不同? Qt版本似乎是正确的。 两者的实际区别是什么?
最佳答案
没关系。返回类型不是函数签名的一部分,因为它不参与重载决议。因此,当您尝试执行赋值时,无论您是否使用返回类型,两个声明都会匹配。
而且由于这些宏的全部意义在于函数永远不会被调用,因此返回 void
并不重要。
关于c++ - 禁止类复制和分配的宏。谷歌-vs- Qt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1454407/