智能指针之我见
https://www.cyhone.com/articles/right-way-to-use-cpp-smart-pointer/
《Effective modern C++: 42 specific ways to improve your use of C++11 and C++14》Item 18: Use std::unique_ptr for exclusive-ownership resource management.
本文整理一下个人对智能指针用法的总结
为什么使用智能指针?
- unique_ptr保证指针的归属权, 并且能够在指针生命周期结束时自动销毁对象, 释放空间
- shared_ptr会进行对象的引用统计, 当引用数为0时, 对象会被销毁.
- 使用智能指针后, 几乎不再需要delete, 无论是生命周期正常结束, 指针重新赋值甚至发生异常, 都不需要手动释放空间, 可以极大程度避免内存泄漏.
选择哪个智能指针?
无论是从安全性还是性能上来看, 都应该优先考虑unique_ptr而不是shared_ptr;
- 如果对象全局唯一, 考虑单例模式
只有对象确实同时被多个对象拥有, 再考虑使用shared_ptr
unique_ptr
什么时候使用
- 首先是在类中用于管理专属的数据. 如字符串等data对象
- 其次是声明生命周期仅限于函数内部的局部指针变量, 使用unique_ptr就不用手动delete, 在函数有多条return时尤其方便
使用细节
形参是否使用智能指针, 取决于函数是否会发生归属权的变化.
对于需要获取指针进行赋值, 拷贝, 比较等操作, 而不改变指针归属的函数, 形参采用raw pointer
对于会改变指针归属的函数, 形参采用智能指针的引用.
返回值是否使用智能指针, 取决于是否允许调用者改变指针归属权
若不允许改变归属权的接口, 返回值为raw pointer
对于允许指针归属权改变的接口ref_api, 返回值为智能指针的引用.
对于要求指针归属权改变的接口ref_api, 返回值为智能指针.
1 | // 若调用者要改变指针归属权 |
- Title: 智能指针之我见
- Author: Huan Lee
- Created at : 2023-09-01 17:06:40
- Updated at : 2023-09-01 19:43:54
- Link: https://www.mirthfullee.com/2023/09/01/notion-None-e640217e/
- License: This work is licensed under CC BY-NC-SA 4.0.