何时使用智能指针,何时使用原始指针


智能指针:责对象生命周期的管理;所以生命期对象全都由unique_ptr和shared_ptr来管理。

原始指针:不负责对象生命周期管理;所以涉及对象的使用而不涉及对象生命周期的管理时,均通过原始指针来使用。


智能指针和原始指针进行转换和传参时可能存在被意外释放的问题,使用时需要注意。比如,

  • 对智能指针A获取原始指针a,传入某函数,函数内重新用a包装出智能指针B,那么函数退出B被销毁时,a所指资源已被释放,原智能指针A无法正常使用。(如果资源在栈上将导致程序崩溃)

  • 原始指针a指向某资源,它被包装成智能指针A后传给某函数,函数结束时A被销毁,所指向的资源也被释放,此时a也无法再使用。


所以,

对于一个接受原始指针的函数(或代码块),切记不可再将传入的原始指针包装为智能指针。

对于一个接受智能指针的函数(或代码块),切记不要直接将原始指针就地包装传入,而应该一开始就使用智能指针而非原始指针管理对象。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM