为 QWidget 派生移动赋值运算符?

Ral*_*kum 2 c++ qt move-semantics qt5

我有一个 QWidget 衍生物,让我们假设标准 QWidget 示例

class MainWindow : public QMainWindow { //.. }
Run Code Online (Sandbox Code Playgroud)

对于此类 MainWindow 来说,满足五规则是否有意义,我的意思是特别是 Move 构造函数和移动赋值?

(因为主窗口应该只创建一次)

小智 5

没有。QObject 派生类永远不应该被复制,并使用Q_DISABLE_COPY宏 QObject 和派生类通过将它们声明为私有来显式禁用/隐藏复制构造函数和赋值运算符。最近的版本和 c++ 11 兼容编译器可能已经改变了这种情况,现在它们可能被声明删除。看这里

所以五法则已经过时了。查看 Qt 源代码,我找不到任何对移动 QObject 派生类的支持......

最后一本值得一读的书是《Qt 对象:身份与价值》