[英]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被銷毀時,它需要我的小部件呢?
這取決於您如何創建子類對象。
當一個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.