Qt4 在此处使用deleteLater()删除发件人()是否安全?

Qt4 在此处使用deleteLater()删除发件人()是否安全?,qt4,Qt4,假设某个插槽被某个基于QDialog的类调用 我在其他地方创建对话框,例如 MyDialog *dlg = new MyDialog (this); connect (dlg , SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString))); dlg->exec (); 在插槽中,我通过删除对象的“最深”父类(即QObject)来删除对象: void slotGetValue (const QString & key)

假设某个插槽被某个基于QDialog的类调用

我在其他地方创建对话框,例如

 MyDialog *dlg = new MyDialog (this);
 connect (dlg , SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString)));
 dlg->exec ();
在插槽中,我通过删除对象的“最深”父类(即QObject)来删除对象:

 void slotGetValue (const QString & key)
 {
    // process the value we retrieved
    // now delete the dialog created
    sender()->deletLater ();
 }

这是正确的做法吗?这样安全吗?

应该没有理由删除模式对话框。由于QDialog::exec()阻塞,因此可以在对话框返回后立即安全地删除该对话框

MyDialog *dlg = new MyDialog (this);
connect (dlg , SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString)));
dlg->exec ();
delete (dlg);
从这一点上,您可能可以猜到不需要使用new和delete。您只需将它放在堆栈上,它在离开作用域时就会被销毁。像这样:

MyDialog dlg(this);
connect(&dlg, SIGNAL(valueSet(QString)) , SLOT(slotGetValue(QString)));
dlg.exec();
除非在MyDialog构造函数中需要this指针,否则没有理由传递它