C++ 智能指针的正确使用方式

C++ 智能指针的正确使用方式

💡 原文中文,约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&;如果需要保存智能指针,建议直接传值。

➡️

继续阅读