【发布时间】:2012-02-28 09:21:11
【问题描述】:
我正在使用 Qt 4.7.4(64 位)开发一个 gui proram。我试图将问题隔离如下:
我有一个窗口:class PreferencesWindow : public QMainWindow,在另一个类中我初始化并显示为
QSharedPointer<PreferencesWindow> pPreferencesWindow = QSharedPointer<PreferencesWindow>(new PreferencesWindow());
pPreferencesWindow->show();
一切都很好,然后我通过按ESC 或单击窗口上的x 按钮来关闭窗口。然后我打电话
QApplication::quit();
终止整个程序。它终止,但在终止之前给出了分段错误。
这里的问题是为什么当我使用常规指针而不是QSharedPointer 时它会干净地终止以及如何正确使用QSharedPointer在这种情况下?
【问题讨论】:
-
我想到了一些事情:当
QSharedPointer超出范围或立即在QApplication::quit();时崩溃?你真的需要一个共享指针吗?作用域指针会起作用吗? -
当我在调用
QApplication::quit()后进行调试时,它会深入到 qt 库代码中,然后我会迷路,所以我不能说它是否超出范围。但我真的需要一个托管指针,因为有时我会手动删除窗口。但我还没有尝试过scopedPointer。无论如何,我现在很好奇“为什么”会这样。 -
你正在摧毁一些东西两次。当窗口被退出、X 等破坏时,它就完成了。没有更多理由删除任何内容。我可能对范围指针有误。
-
@Ernest Friedman-Hill 的回答是正确的(第 2 段)。我认为当
QApplication::quit()被调用时窗口被删除,而不是在按'x'关闭时被删除
标签: c++ qt pointers segmentation-fault qsharedpointer