【发布时间】:2016-01-18 20:09:52
【问题描述】:
让我们有一个班级Test 和一个班级AnotherClass。两者都派生自 QObject。
测试.h:
class Test : public QObject
{
Q_OBJECT
public:
Test(QObject* parent);
~Test();
private:
AnotherClass* other;
};
class AnotherClass : public QObject
{
Q_OBJECT
public:
AnotherClass(QObject* parent);
~AnotherClass();
};
Test.cpp:
Test::Test(QObject* parent) : QObject(parent)
{
other = new AnotherClass(this);
}
Test::~Test()
{
delete other;
}
Test-instance 被销毁时应该自动销毁other,因为Test 是other 的父级,对吧?
- 现在我应该自己删除
~Test()中的other,还是因为它尝试删除同一个对象两次而使程序处于未定义阶段? - 这里的正确方法是什么?
【问题讨论】:
-
你的析构函数应该是虚拟的。
-
@KoVadim - 因为 QObject 有虚拟析构函数,他的析构函数已经隐含虚拟了..
-
删除
other后为什么不在代码中添加delete this??? QObjects 是否会在没有明确的delete字样的情况下自动删除,即使它们没有父对象?