<QtClassHelperMacros>

类辅助宏。更多...

Header: #include <QtClassHelperMacros>

宏

Q_DISABLE_COPY(Class)
Q_DISABLE_COPY_MOVE(Class)
(since 6.9) Q_DISABLE_COPY_MOVE_X(Class, reason)
(since 6.9) Q_DISABLE_COPY_X(Class, reason)

详细说明

宏文档

Q_DISABLE_COPY(Class)

禁用所给Class 的复制构造函数和赋值运算符。

不应将QObject 的子类实例视为可被复制或赋值的值,而应视为唯一的标识。这意味着,当你创建QObject (无论是直接还是间接)的子类时,不应为其提供复制构造函数或赋值运算符。 然而,仅仅在类中省略它们可能还不够,因为如果你不小心编写了需要复制构造函数或赋值运算符的代码(这种情况很容易发生),编译器会“贴心地”为你生成它们。你必须采取进一步措施。

细心的用户可能会注意到,从 `QObject ` 派生的 Qt 类通常会在私有部分包含以下宏:

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

它在私有部分声明了一个复制构造函数和一个赋值运算符,这样如果你误用了它们,编译器就会报告错误。

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

但即使这样,也可能无法绝对捕获所有情况。你可能会忍不住想这样做:

首先,千万不要这样做。大多数编译器会生成使用复制构造函数的代码,因此会报告访问权限违规错误;但你的 C++ 编译器并没有义务以特定方式为该语句生成代码。它可能会生成既不使用复制构造函数,也不使用我们设为私有的赋值运算符的代码。 在这种情况下,虽然不会报告错误,但当你调用w 的成员函数时,应用程序很可能会崩溃。

另请参阅 Q_DISABLE_COPY_MOVE 和Q_DISABLE_COPY_X 。

Q_DISABLE_COPY_MOVE(Class)

一个便捷宏,用于禁用给定Class 的复制构造函数、赋值运算符、移动构造函数和移动赋值运算符。

另请参阅 Q_DISABLE_COPY 和Q_DISABLE_COPY_MOVE_X 。

[since 6.9] Q_DISABLE_COPY_MOVE_X(Class, reason)

与Q_DISABLE_COPY_MOVE 类似,该宏禁用了类Class 的复制和移动操作。

此外,本文档还解释了reason ,说明了该类为何不支持复制/移动操作。在 C++26 中,当代码尝试执行这些不受支持的操作时,编译器会在错误消息中报告该原因。

该宏在 Qt 6.9 中引入。

另请参阅 Q_DISABLE_COPY_X 和Q_DECL_EQ_DELETE_X 。

[since 6.9] Q_DISABLE_COPY_X(Class, reason)

与Q_DISABLE_COPY 类似,该宏禁用了类Class 的复制操作。

此外,该文档还解释了reason ,说明了该类为何不支持复制操作。在 C++26 中,当代码尝试执行这些不受支持的操作时,编译器会在错误消息中报告该原因。

该宏在 Qt 6.9 中引入。

另请参阅 Q_DISABLE_COPY 、Q_DISABLE_COPY_MOVE_X 以及Q_DECL_EQ_DELETE_X 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.