<QtClassHelperMacros> Proxy Page

Q_DISABLE_COPY ( )
Q_DISABLE_COPY_MOVE ( )

宏文档编制

Q_DISABLE_COPY ( )

禁用拷贝构造函数和赋值运算符的使用为给定 .

实例化的子类 QObject 不应被认为是可以拷贝 (或赋值) 的值,而是作为唯一标识。这意味着当创建自己的子类化 QObject (直接或间接),应 not 赋予它拷贝构造函数 (或赋值运算符)。不管怎样,从类中简单省略它们可能不够,因为,若过失编写了一些要求拷贝构造函数 (或赋值运算符) 的代码 (这很容易做到),编译器会体贴地为您创建它。您必须做更多。

好奇用户将看到 Qt 类派生自 QObject 通常包括此宏在私有区间:

class MyClass : public QObject
{
private:
    Q_DISABLE_COPY(MyClass)
};
					

在私有区间声明拷贝构造函数和赋值运算符,所以,若过失使用了它们,编译器会报错。

class MyClass : public QObject
{
private:
    MyClass(const MyClass &) = delete;
    MyClass &operator=(const MyClass &) = delete;
};
					

即使这样,也绝对不可能捕获每种情况。可能被诱惑做像这样的一些事:

QWidget w = QWidget();
					

首先,不要这样做。大多数编译器将生成使用拷贝构造函数的代码,所以会报告违反隐私错误,但不要求 C++ 编译器以特定方式为该语句生成代码。可以生成代码使用 neither 拷贝构造函数 nor 私有赋值运算符。这种情况不会报错,但应用程序可能崩溃当调用成员函数从 w .

另请参阅 Q_DISABLE_COPY_MOVE .

Q_DISABLE_COPY_MOVE ( )

方便宏禁用拷贝构造函数、赋值运算符、移动构造函数及移动赋值运算符的使用为给定 .

另请参阅 Q_DISABLE_COPY .