💡
原文中文,约5200字,阅读约需13分钟。
📝
内容提要
C++11 引入了三种智能指针:unique_ptr、shared_ptr 和 weak_ptr。unique_ptr 代表独占所有权,适合防止内存泄漏;shared_ptr 允许多个指针共享同一内存,但性能较差;weak_ptr 用于解决循环引用问题。选择智能指针时需考虑对象的所有权和生命周期管理,以有效避免错误。
🎯
关键要点
- C++11 引入了三种智能指针:unique_ptr、shared_ptr 和 weak_ptr。
- unique_ptr 代表专属所有权,只能被一个对象持有,支持移动但不支持复制。
- 使用 unique_ptr 可以避免内存泄漏,特别是在类属性和异常安全的场景中。
- shared_ptr 代表共享所有权,多个指针可以共享同一块内存,支持引用计数。
- shared_ptr 的性能开销较大,内存占用是裸指针的两倍,且原子操作性能较低。
- weak_ptr 用于解决 shared_ptr 的循环引用问题,不增加引用计数。
- 选择智能指针时需考虑对象的所有权和生命周期管理,以有效避免错误。
❓
延伸问答
C++11 中引入了哪些智能指针?
C++11 中引入了 unique_ptr、shared_ptr 和 weak_ptr 三种智能指针。
unique_ptr 的主要特点是什么?
unique_ptr 代表专属所有权,只能被一个对象持有,支持移动但不支持复制。
shared_ptr 的性能开销如何?
shared_ptr 的内存占用是裸指针的两倍,且原子操作性能较低,因此性能开销较大。
weak_ptr 的作用是什么?
weak_ptr 用于解决 shared_ptr 的循环引用问题,不增加引用计数。
在什么情况下应该使用 unique_ptr?
unique_ptr 适合用于类属性和需要异常安全的场景,可以自动管理内存,避免内存泄漏。
如何选择智能指针作为函数参数?
如果函数只需要使用指针而不管理其生命周期,可以使用裸指针或 const shared_ptr&;如果需要保存智能指针,建议直接传值。
🏷️
标签
➡️