C++利用引用技術和智能指針可以實現對堆內存的自動管理,當智能指針退出生命週期時,會減小管理對象的引用計數,當對象引用計數爲0時,便釋放該堆內存資源。看上去這一技術很不錯,堆內存有生命週期了,不用手動釋放了。實時上智能指針任然存在危險,下面就是一個例子。 class A; class A class B ... 上述代碼中的insA和insB指向的內存似乎在兩個智能指針退出生命週期後會自動釋放掉,實際上不然,假如insA先退出生命週期,insA->refCount減1,insA->refCount == 1;insA不會釋放,於是有insB->refCount == 2;然後insB退出生命週期,insB->refCount--,insB->refCount == 1;insB爲釋放,此時已經沒有時機釋放insA和insB了,於是內存泄漏。 |
C++中智能指針循環指向的陷阱
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.