[英]Which memory management method should we use in Qt?
我對編程很陌生,因為我還在學習如何高效編碼,所以我的問題看起來有點奇怪。
當我正在學習如何使用Qt進行編碼時,我知道Qt有一個內存管理方法,當父QSharedPointer
被刪除時,父進程會刪除它的所有子QSharedPointer
,然后是QSharedPointer
和其他許多智能指針(或者你可能會提到boost::shared_ptr
)。
我理解兩種方法究竟是如何工作的,但我的問題是,當涉及到Qt中整個系統結構的設計時,我是否應該將我的大部分類作為QObject
的子類並將所有權移交給QT來進行內存管理,或者只是使用boost::shared_ptr
或QSharedPointer
來避免潛在的內存泄漏?
因為如果我們采用這兩種技術會有很多問題需要考慮,因為它可能導致雙刪除問題。
那么哪種技術具有更好的性能,哪種技術在設計上更好?
如您所知,Qt有一個模型,其中:
QObjects在對象樹中組織自己。 當您使用另一個對象作為父對象創建QObject時,它將添加到父對象的children()列表中,並在父對象時刪除。
此外:
您也可以自己刪除子對象,並將自己從父母身上刪除。
因此,只要您使用該模型,就不會出現雙重釋放的問題。
也就是說,我見過和使用的一種常見方法(但要注意有理由這樣做)是創建兩個層,前者是純粹的基於Qt的層,后者完全是Qt-unware。 當然,它需要一個薄層來回傳遞信息。
在這樣的模型中,可以合理地看到兩種方法都適用,從不混合和正確工作。
那么哪個是最好的? 這取決於你的目標。
我已經使用了一種混合方法,其中底層是一個獨立的代碼庫,我可以使用我喜歡的庫創建一個接口,但我也想自由切換到UI的任何庫。
如果情況並非如此,並且您的項目純粹是基於Qt的項目,則沒有理由不將所有內容都基於Qt本身所基於的模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.