2011-04-25 63 views
0

我在刪除QSA的引用對象時遇到了一些問題。在構造函數中,我寫道:QSA的子對象刪除問題

QSProject * project = {initialization of QSProject} 
    MyWrapper * wrapper = new MyWrapper; // MyWrapper is QObject's child. It comes without parent here 
    project->addObject(wrapper); 

我在descructor寫道:

project->clearObjects(); 
    delete project; 
    delete wrapper; 

此代碼原因在段錯誤析構函數的執行,正是 - 當我試圖刪除包裝。

我做了一些研究,我知道:

  1. QSProject不會刪除他的「子對象」,所以這不是一個「雙刪除」的問題
  2. 如果我不去在構造函數中添加包裝到QSProject中,它運行良好。
  3. 如果我不刪除在deccructor包裝,它運作良好(但內存泄漏)。

這是怎麼回事?

+0

只要你知道,你知道QSA已被棄用,並在2008年達到報廢?它已被替換爲[QtScript](http://doc.qt.nokia.com/latest/qtscript.html)。它可能不適用於你的項目,但我想確保你知道。 – Casey 2011-04-25 16:33:13

回答

0

首先,我對QSA並不熟悉,但考慮到Qt API通常如何工作,QSProject很可能取得了對象的所有權。這意味着QSProject正在使用QObject::setParent()重新對象。

在這種情況下,您正在雙重刪除該對象。

您是否使用valgrind等工具進行驗證,當您忽略刪除時,實際上是在泄漏內存?

+0

是的。我已經檢查過兩次,QSProject不會把孩子帶到父母身上,記憶真的會泄漏。 – Arenim 2011-04-26 09:21:05