2015-12-24 60 views
3

我對編程頗爲陌生,因爲我仍然在學習如何高效地編寫代碼,所以我的問題看起來有點奇怪。我們應該在Qt中使用哪種內存管理方法?

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

我明白這兩種方法的工作方式,但我的問題是,當涉及到Qt中整個系統結構的設計時,我是否應該將我的大部分類作爲QObject的子類,並將所有權移交給QT內存管理,還是簡單地使用boost::shared_ptrQSharedPointer的東西來避免潛在的內存泄漏?

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

那麼哪種技術具有更好的性能或哪種設計更好?

回答

4

如你所知,Qt的有哪些型號:

的QObject組織起來的對象樹。當你創建一個QObject與另一個對象作爲父對象時,它會被添加到父對象的children()列表中,並在父對象被刪除時被刪除。

此外:

您也可以刪除子對象自己,他們會從他們的父母自行拆除。

因此,只要您使用該模型,您就不會有雙重空閒的問題。

這就是說,我已經看到和使用過的一種常見方法(但是要知道,有這樣做的理由)是創建兩層,前者是純粹基於Qt的,後者完全是Qt -unaware。當然,它需要一個能夠來回轉換信息的薄層。
在這樣的模型中,合理地看到兩種方法都適用,從不混合並正確工作。

那麼,哪個最好?這取決於你的目標。

我已經使用了混合的方法,其中底層是作爲一個獨立的代碼庫的基礎上,我可以使用我的首選庫創建一個接口,但我也想自由切換到任何用於UI的庫。
如果情況並非如此,並且您的項目是純粹基於Qt的項目,那麼沒有理由不將所有的東西都放在Qt本身所基於的模型上。

相關問題