我有一個標準的QWidget派生類,但是在小部件銷燬後我得到了兩倍的空閒。每當我添加一個QTreeView指針作爲成員變量。QWidget刪除問題
例如爲:
private:
QTreeView *m_treeView;
在類的構造函數,我做一個簡單:
m_treeView = new QTreeView(this);
而QWidget的派生類的析構函數是默認的析構函數。
如果我放棄使用完全成員指針和做:
QTreeView *treeView = new QTreeView(this);
一切都很好。有QLabel成員指針也工作正常。爲什麼我看到這種行爲?指針是否是類的成員應該與類的析構函數沒有關係,因爲對象是在堆上創建的,並且類不會刪除它們的成員變量所指向的對象,除非指示在自定義析構函數。
事實證明,這是一個相當平凡的問題。我已經將這個類移動到第二個目錄,但由於某種原因,qmake沒有將使用QWidget派生類的MainWindow類標記爲需要重建。 將指針添加爲成員變量會改變類的大小,這會在刪除時導致內存損壞問題。由於我沒有改變類的構造函數的ABI,所以應用程序目標仍然被鏈接,但是QWidget派生類的大小變化是導致我所有問題的原因。 –