gpt4 book ai didi

c++ - 为什么在 QSharedPointer 中使用窗口时会发生段错误?

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:20 26 4
gpt4 key购买 nike

我正在使用 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

最佳答案

我怀疑问题是当您关闭窗口时,pPreferencesWindow 指向的数据结构在 QSharedPointer 不知情的情况下被删除。当 QSharedPointer 本身随后被销毁时,它会双倍删除窗口,然后出现段错误。

基本上,与所有共享指针实现一样,要么人人参与,要么无人参与。由于 Qt 内部永远不会知道您正在使用智能指针来管理窗口,因此您不能使用智能指针。然而,这是因祸得福。这意味着 Qt 本身占有指针并同意为您管理它,所以您毕竟不需要智能指针!

关于c++ - 为什么在 QSharedPointer 中使用窗口时会发生段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9167934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com