簡體   English   中英

我們應該在Qt中使用哪種內存管理方法?

[英]Which memory management method should we use in Qt?

我對編程很陌生,因為我還在學習如何高效編碼,所以我的問題看起來有點奇怪。

當我正在學習如何使用Qt進行編碼時,我知道Qt有一個內存管理方法,當父QSharedPointer被刪除時,父進程會刪除它的所有子QSharedPointer ,然后是QSharedPointer和其他許多智能指針(或者你可能會提到boost::shared_ptr )。

我理解兩種方法究竟是如何工作的,但我的問題是,當涉及到Qt中整個系統結構的設計時,我是否應該將我的大部分類作為QObject的子類並將所有權移交給QT來進行內存管理,或者只是使用boost::shared_ptrQSharedPointer來避免潛在的內存泄漏?

因為如果我們采用這兩種技術會有很多問題需要考慮,因為它可能導致雙刪除問題。

那么哪種技術具有更好的性能,哪種技術在設計上更好?

如您所知,Qt有一個模型,其中:

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

此外:

您也可以自己刪除子對象,並將自己從父母身上刪除。

因此,只要您使用該模型,就不會出現雙重釋放的問題。

也就是說,我見過和使用的一種常見方法(但要注意有理由這樣做)是創建兩個層,前者是純粹的基於Qt的層,后者完全是Qt-unware。 當然,它需要一個薄層來回傳遞信息。
在這樣的模型中,可以合理地看到兩種方法都適用,從不混合和正確工作。

那么哪個是最好的? 這取決於你的目標。

我已經使用了一種混合方法,其中底層是一個獨立的代碼庫,我可以使用我喜歡的庫創建一個接口,但我也想自由切換到UI的任何庫。
如果情況並非如此,並且您的項目純粹是基於Qt的項目,則沒有理由不將所有內容都基於Qt本身所基於的模型。

暫無
暫無

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

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