簡體   English   中英

QT中的動態內存釋放

[英]Dynamic memory Deallocation in QT

QT編碼中動態分配的指針是如何被破壞的,因為我們沒有為它們編寫特定的析構函數?

為了擴展Neox的答案 ,Qt有兩種對象管理方法:

  1. QObject樹結構
  2. 托管指針類

這兩者並沒有真正混合得很好,原因很明顯。

QObject可以是“空閑”或擁有父級。 當QObject有其父集時(通過向QObject構造函數提供指向另一個QObject的指針,或者通過調用setParent() ),父QObject成為子QObject的所有者,並確保它的任何子節點都被銷毀。是。 還有幾種方法可用於檢查子/父關系。

另一種管理動態分配對象的方法是托管指針類, 本文非常好地解釋了這一點 總結一下:

  • QScopedPointer類存儲一個指向動態分配對象的指針,並在銷毀時將其刪除”,因此當您需要具有明確且明顯的所有權和生命周期的對象時,這是很好的。
  • QSharedPointer類擁有對共享指針的強引用[和]將刪除它超出范圍時所持有的指針,前提是沒有其他QSharedPointer對象引用它”,因此當所有權不那么明確時,它是好的,但是你要確保它不會丟失並成為內存泄漏。 QWeakPointer可用於共享指針而不暗示任何所有權。

正如您所看到的,一些受保護的指針類可以與QObject樹一起使用,但是您應該確保在執行此操作之前徹底閱讀並理解文檔,否則您最終可能會損壞數據結構。

簡短的回答是:

QObjects在對象樹中組織自己。 當您使用另一個對象作為父對象創建QObject時,它將添加到父對象的children()列表中,並在父對象時刪除。

Qt有一個關於框架內對象層次結構和所有權的好文檔。 你可以在這里閱讀

暫無
暫無

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

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