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

pointer to class A is passed to class B, but when B is deleted, A is as well. How to keep A?

本文关键字:删除 但当 也是 何保持 指针      更新时间:2023-10-16

在Qt创建者的C++项目中,我有一个类Settings,它存储了我想在类应用程序中使用的一些设置(应用程序可以操作设置,删除应用程序后我需要这些更新的数据)。首先,我为每个类定义了一个指针,声明了它,并将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

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

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

谢谢你的回答!

编辑:问题是设置作为QWidget被添加到应用程序的ui中,因此成为应用程序的子项。我在delete ui;:之前的a的析构函数中添加了这一行,解决了这个问题

s->setParent(0);

谢谢你的提示!

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

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

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

相关文章: