何時使用智能指針,何時使用原始指針


智能指針:責對象生命周期的管理;所以生命期對象全都由unique_ptr和shared_ptr來管理。

原始指針:不負責對象生命周期管理;所以涉及對象的使用而不涉及對象生命周期的管理時,均通過原始指針來使用。


智能指針和原始指針進行轉換和傳參時可能存在被意外釋放的問題,使用時需要注意。比如,

  • 對智能指針A獲取原始指針a,傳入某函數,函數內重新用a包裝出智能指針B,那么函數退出B被銷毀時,a所指資源已被釋放,原智能指針A無法正常使用。(如果資源在棧上將導致程序崩潰)

  • 原始指針a指向某資源,它被包裝成智能指針A后傳給某函數,函數結束時A被銷毀,所指向的資源也被釋放,此時a也無法再使用。


所以,

對於一個接受原始指針的函數(或代碼塊),切記不可再將傳入的原始指針包裝為智能指針。

對於一個接受智能指針的函數(或代碼塊),切記不要直接將原始指針就地包裝傳入,而應該一開始就使用智能指針而非原始指針管理對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM