2012-11-04 50 views
0
的其他隱共享數據結構產生內存泄漏

的QString和Qt的許多數據結構是隱式共享如何通過的QString和Qt

我怎麼可能讓自己的內存泄漏?

循環依賴會導致內存泄漏,如果它是shared_ptr QString和Qt內存中的其他類似QString的數據結構是否泄漏? 我想知道如何使QString泄漏的內存,所以我不會陷入它的陷阱 。

經過一番研究,看起來好像我不用擔心循環依賴當 它是QString?感謝您的回覆,現在我不必擔心它。

+1

難道你不需要按照相反的順序來創建循環依賴嗎? –

+3

即使你這樣做,這裏也沒有循環依賴。 (加Qt使用引用計數器,共享狀態將得到清理,一旦三個對象死亡。) – Mat

+0

所以QString沒有像循環依賴陷阱?是否有可能使QString內存泄漏? – StereoMatching

回答

1

在Qt之前的版本中,併發訪問共享相同數據的QString的兩個副本可能會導致問題,因爲QString是COW,但未鎖定引用計數。這是一個難題。從版本4開始,使用解決問題的原子來處理參考計數。 你可以通過在其中放入可以拋出奇怪位置的東西來破壞一些Qt容器,但我想不出可能會影響QString的方式。是在Qt的異常處理warry,將文檔的相當模糊,這通常意味着要小心;)

http://doc-snapshot.qt-project.org/4.8/exceptionsafety.html

如果您運行的內存在運行的Qt指望世界上結束,在這種情況下,它可能沒有按」不管QString是否泄露,