是否有必要删除Qt中的对话窗口指针?

时间:2014-11-05 14:24:54

标签: c++ qt

我使用此代码:

MyDialog *md = new MyDialog();
md -> show();

在Qt中打开一个对话框窗口。关闭对话框窗口时会自动删除md还是窗口完成后需要运行delete md

2 个答案:

答案 0 :(得分:9)

在您的小段代码中,您需要删除它,因为它没有父级,如果您设置了父级,父级将删除它的子级,您只需要删除& #34;主窗口" (没有父母的窗口)。

对于QWidget派生类,您可以使用:Qt::WA_DeleteOnClose标志,然后在窗口小部件关闭时释放内存,请参阅文档here 然后代码将成为:

MyDialog *md = new MyDialog();
md->setAttribute(Qt::WA_DeleteOnClose);
md->show();

答案 1 :(得分:3)

是。除非您this通过,thisQWidget或任何其他QWidget

MyDialog *md = new MyDialog(this);
md->show();

你需要:

delete md;

在某些时候为了释放它的记忆。此外,在这种情况下,您需要确保object tree链接良好。您还可以在setAttribute(Qt::WA_DeleteOnClose);上调用md,这样当您关闭对话框时,其内存也会在Zlatomir表示时释放。但是,如果您需要md在关闭后才能生效setAttribute(Qt::WA_DeleteOnClose);,则无法选择。这也很危险,如果你不小心,可能会导致访问冲突/分段错误。