我有一个标准的QWidget派生类,但是我可以在小部件销毁时获得双重释放。每当我将QTreeView指针添加为成员变量时。
E.g:
private:
QTreeView *m_treeView;
在类的构造函数中,我做了一个简单的事:
m_treeView = new QTreeView(this);
QWidget派生类的析构函数是默认的析构函数。
如果我完全放弃使用成员指针并执行:
QTreeView *treeView = new QTreeView(this);
一切都很好。拥有QLabel成员指针也可以正常工作。为什么我看到这种行为?指针是否是类的成员应该对类的析构函数没有影响,因为对象是在堆上创建的,并且类不会删除其成员变量指向的对象,除非指示在自定义析构函数。
答案 0 :(得分:0)
每当您的QWidget派生对象被删除时,m_treeView
也将被删除,因为您在构建this
时将m_treeView
作为父对象传递
这是因为new QTreeView(this)
最终将调用QObject( QObject * parent )
,这意味着您的成员变量将被添加为QWidget派生对象的子对象。
父对象的析构函数会破坏所有子对象。
修改强>: 对不起,错过了
QWidget派生类的析构函数是默认的析构函数。
部分