0

在 Qt-creator 的 C++ 项目中,我有一个类 Settings,它存储了一些我想在类 App 中使用的设置(App 可以操作设置,删除 App 后我需要这个更新的数据)。首先,我为每个类定义一个指针,声明它并将设置传递给 App。

设置.h:

class Settings {
public:
  Settings();
// ...
}

应用程序.h:

class App {
public:
  App(Settings *set);
private:
  Settings *s;
// ...
}

应用程序.cpp:

App::App(Settings *set){
s = set;
// manipulate s...
}

主文件

Settings* s;
App* a;

主文件

// ...
s = new Settings;
a = new App(s);

// ...
if(!aIsNeeded)
 delete a;
// from here, s is deleted too

这很好,直到我再次需要具有相同设置的应用程序。当我调用 a = new App(s); 有一个例外,因为 s 似乎也被删除了。

有更好的方法吗?为什么要删除s?

感谢您的回答!

编辑:问题是设置为 QWidget 被添加到 App 的 ui 中,因此成为 App 的子项。a我通过在before的析构函数中添加这一行来解决它delete ui;

s->setParent(0);

感谢所有提示!

4

2 回答 2

0

默认情况下不应该发生这种情况。似乎App有一个析构函数正在删除该指针。

于 2012-09-01T16:28:11.597 回答
0

显然,该成员在 的析构函数中被释放a,在这种情况下,由您来定义Settings. 由于它是在 之外创建的App,我会说它的所有权不属于App,所以App不应该删除它。

当然,如果你使用智能指针,你就不会遇到这个问题。

于 2012-09-01T16:30:16.543 回答