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

时间:2018-11-02 10:06:32

标签: c++ qt

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

MyDialogClass myDialogWindow = nullptr;

并使用

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

myDialogWindow = new MyDialogClass(this);

由于其属性,它也是delf销毁:

this->setAttribute(Qt::WA_DeleteOnClose);

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

谢谢。

3 个答案:

答案 0 :(得分:10)

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

但是,您可以使用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
}

答案 1 :(得分:1)

您通常不能这样做。任何T都不知道它是被用作T还是T&还是T*,并且您不能自动将所有相关的T*更改为{{1 }}来自nullptr内部(因为它不了解它们)。

您还需要一些其他方式来通知您的T实例已被破坏-例如,一个信号。

答案 2 :(得分:1)

您可以捕获对象被破坏的时间,并擦除指针。

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