<QtClassHelperMacros> 代理页面
宏
宏文档
Q_DISABLE_COPY(类)
禁用给定 类 的拷贝构造函数和赋值运算符。
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_MOVE(类)
一个方便的宏,用于禁用给定 类 的拷贝构造函数、赋值运算符、移动构造函数和移动赋值运算符的使用。
另请参阅Q_DISABLE_COPY。
© 2024 The Qt Company Ltd. 本文件中包含的文档贡献是该各自所有者的版权。本文件所提供的文档是根据自由软件基金会发布的 GNU 自由文档许可版本 1.3 许可的。Qt 和相应的标志是芬兰的 The Qt Company Ltd. 以及/或世界其他国家的商标。所有其他商标属于它们各自的所有者。