指向A类的指针传递给B类,但是当B被删除时,A也是如此。如何保持A?

时间:2012-09-01 16:24:50

标签: c++ qt

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

settings.h:

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

app.h:

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

app.cpp:

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

main.h

Settings* s;
App* a;

的main.cpp

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

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

这很好,直到我再次使用相同的设置需要App。我打电话的时候     a =新应用程序; 有一个例外,因为s似乎也被删除了。

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

感谢您的回答!

编辑:问题是设置为QWidget已添加到App的ui,因此成为了App的孩子。我在a之前在delete ui;的析构函数中添加了这一行来解决它:

s->setParent(0);

感谢所有提示!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

当然,如果您使用智能指针,则不会出现此问题。