QWidget删除问题

时间:2011-08-11 13:45:18

标签: c++ qt

我有一个标准的QWidget派生类,但是我可以在小部件销毁时获得双重释放。每当我将QTreeView指针添加为成员变量时。

E.g:

private:
    QTreeView *m_treeView;

在类的构造函数中,我做了一个简单的事:

m_treeView = new QTreeView(this);

QWidget派生类的析构函数是默认的析构函数。

如果我完全放弃使用成员指针并执行:

QTreeView *treeView = new QTreeView(this);

一切都很好。拥有QLabel成员指针也可以正常工作。为什么我看到这种行为?指针是否是类的成员应该对类的析构函数没有影响,因为对象是在堆上创建的,并且类不会删除其成员变量指向的对象,除非指示在自定义析构函数。

1 个答案:

答案 0 :(得分:0)

每当您的QWidget派生对象被删除时,m_treeView也将被删除,因为您在构建this时将m_treeView作为父对象传递

这是因为new QTreeView(this)最终将调用QObject( QObject * parent ),这意味着您的成员变量将被添加为QWidget派生对象的子对象。

  

父对象的析构函数会破坏所有子对象。

来自the Qt docs

修改: 对不起,错过了

  

QWidget派生类的析构函数是默认的析构函数。

部分