簡體   English   中英

QT4內存管理

[英]QT4 Memory Management

我來自一個相當強大的C背景,並且在C ++中有相當堅實的基礎。 最近我一直在使用C#和其他更高級別的語言。 我正在研究的項目可以從使用QT4中獲益,但我對內存管理有一些問題,我似乎無法理解。 我已經閱讀了QT4文檔,但對我沒什么幫助。 所以這就是我在這里的原因。

1)好的,首先,我了解使用QT4對象的最簡單方法是在本地聲明它們:

void MyFunc()
{
     QString foo;
     // do stuff to foo

}

這很簡單,我可以拿走那個對象,並傳遞它,並知道當它超出范圍時它將被銷毀。 但這是我的問題。

1)如果我創建一個QList並向其添加對象,然后QList超出范圍,它是否會嘗試釋放子對象?

2)如果QT4例程返回指向對象的指針,那么我是否負責取消該對象的分配?

3)如果我創建QWidget的子類,並將其添加到QWindow,我如何確保在QWindow被銷毀時,它需要我的小部件?

謝謝您的幫助。

如果我創建一個QList並向其添加對象,然后QList超出范圍,它是否會嘗試釋放子對象?

QList就像std :: list一樣。 它會在被破壞時銷毀所包含的對象。

如果Qt4​​例程返回指向對象的指針,那么我是否負責該對象的取消分配?

通常不會,文檔應該指明發生了什么。 take *函數是一個例外(例如:QTableWidget :: takeItem)。

如果我創建一個QWidget的子類,並將其添加到QWindow,我如何確保在QWindow被銷毀時,它需要我的小部件呢?

這取決於您如何創建子類對象。

  • 您可以將其添加為窗口小部件的成員(順便說一下,沒有QWindow),它將像任何成員變量一樣被銷毀。
  • 您可以使用new分配它,並將窗口作為父窗口傳遞給它,由於Qt對象樹的實現,它將被刪除(如提到的蛋糕)
  • 你可以自己做內存管理。

當一個QWidget(或任何QObject)被銷毀時,它會從其父級的刪除列表中刪除它,這樣你就可以自己刪除它而不用擔心雙重刪除。

你可能想從這里開始: 對象樹,因為這解釋了Qt使用的父/子關系(到目前為止給出的所有其他鏈接都是過時的或第三方)。

1)如果我創建一個QList並向其添加對象,然后QList超出范圍,它是否會嘗試釋放子對象?

是的,它的行為就像std :: list一樣。 就像std :: list一樣,它只會釋放不刪除。 這是一些Qt指針類派上用場的地方

2)如果QT4例程返回指向對象的指針,那么我是否負責取消該對象的分配?

正如RPG所說,通常不會,但如果你是文件就會這么說。

3)如果我創建QWidget的子類,並將其添加到QWindow,我如何確保在QWindow被銷毀時,它需要我的小部件?

創建子類時,請確保在ctor中使用parent參數。 這樣,Qt就會刪除該對象。 如果需要,可以使用QObject :: setParent(QObject * parent)設置父項

答案是Qt中存在的父/子對象關系。 當父對象超出范圍,或被任何其他方式銷毀時,Qt確保將其所有子對象銷毀。

有關此行為的更多信息,請訪問此處 - > http://doc.trolltech.com/4.4/objecttrees.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM