如何在自删除后将对象设置为nullptr

How to set object to nullptr after self deletion

本文关键字:对象 设置 nullptr 删除      更新时间:2023-10-16

我有一个对话框窗口,其中有一个QDialog类。我在头文件中声明:

MyDialogClass myDialogWindow = nullptr;

并用在运行时的某个地方创建窗口

myDialogWindow = new MyDialogClass(this);

它也是delf破坏,因为它的属性:

this->setAttribute(Qt::WA_DeleteOnClose);

现在有人知道我如何在没有连接信号的情况下自删除后将myDialogWindow指针设置为nullptr吗?

提前谢谢。

如果没有一些信号或事件逻辑,这是不可能的。对象不拥有指针,指针指向对象。

但是,您可以使用QPointer来为您封装信号处理和调零。

QPointer<MyDialogClass> myDialogWindow;
myDialogWindow = new MyDialogClass(this);
myDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
// some time later, check dialog has not been closed
if( ! myDialogWindow.isNull() )
{
// do something with dialog
}

您可以捕捉对象何时被销毁,并擦除指针。

connect(myDialogWindow, &QObject::destroyed, [&myDialogWindow](){ myDialogWindow = nullptr;});

一般情况下不能这样做。任何T都无法知道它是用作T还是用作T&T*,并且您也无法从T内部自动将所有相关的T*更改为nullptr(因为它不知道它们(。

您需要其他方式来通知您的MyDialogClass实例已被销毁,例如一个信号。