在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);
感谢所有提示!
答案 0 :(得分:0)
默认情况下不应该这样。 App
似乎有一个正在删除该指针的析构函数。
答案 1 :(得分:0)
显然,该成员在a
的析构函数中被释放,在这种情况下,由您来定义Settings
的所有权。由于它是在App
之外创建的,我会说它的所有权不属于App
,因此App
不应删除它。
当然,如果您使用智能指针,则不会出现此问题。