gpt4 book ai didi

c++ - 尽管类派生自 QObject,但定义自己的析构函数?

转载 作者:可可西里 更新时间:2023-11-01 18:17:04 25 4
gpt4 key购买 nike

让我们有一个类 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();
};

测试.cpp:

Test::Test(QObject* parent) : QObject(parent) 
{
other = new AnotherClass(this);
}

Test::~Test()
{
delete other;
}

other 应该在 Test 实例被销毁时自动销毁,因为 Testother 的父级,对吧?

  • 现在我应该在 ~Test() 中自己删除 other 还是因为它试图删除同一个对象两次而使程序处于未定义阶段?
  • 这里正确的方法是什么?

最佳答案

QObjects 在对象树中组织自己。当您创建一个以另一个对象作为父对象的 QObject 时,该对象会自动将自己添加到父对象的 children() 列表中。 parent 取得对象的所有权;即,它将在其析构函数中自动删除其子项。参见 Object Trees & Ownership获取更多信息。

因为您将 Test 对象的 this 指针传递给 AnotherClass 构造函数,这意味着您使用 Test 对象作为AnotherClass 的父类。因此,删除 Test 对象也会删除它的子对象,您不需要显式删除 other

但是,在这种情况下,在析构函数中显式删除不会导致双重删除,因为它会导致从父级的 children() 列表中注销

关于c++ - 尽管类派生自 QObject,但定义自己的析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34786769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com