C++ 面试题
目录

C++ 中 weak_ptr 的作用是什么?

· 约 3 分钟读完 · 第 50 / 181 章

推荐答案

weak_ptr 是 C++ 标准库中的一种智能指针,用于解决 shared_ptr 的循环引用问题。它不会增加引用计数,也不会管理对象的生命周期,而是通过观察 shared_ptr 所管理的对象来避免悬空指针的问题。

本题详细解读

weak_ptr 的作用

  1. 解决循环引用问题:shared_ptr 的引用计数机制在对象之间存在循环引用时会导致内存泄漏。weak_ptr 不会增加引用计数,因此可以打破这种循环引用。

  2. 观察 shared_ptr 管理的对象:weak_ptr 可以观察 shared_ptr 所管理的对象,但不会影响该对象的生命周期。当 shared_ptr 释放对象时,weak_ptr 会自动失效。

  3. 避免悬空指针:weak_ptr 可以通过 lock() 方法获取一个 shared_ptr,从而安全地访问对象。如果对象已经被释放,lock() 会返回一个空的 shared_ptr,避免了悬空指针的问题。

使用示例

关键方法

  • lock():返回一个 shared_ptr,如果对象仍然存在,则返回有效的 shared_ptr,否则返回空的 shared_ptr。
  • expired():检查 weak_ptr 是否已经失效(即对象是否已被释放)。

适用场景

  • 当需要观察一个对象但不希望影响其生命周期时。
  • 当对象之间存在循环引用时,使用 weak_ptr 可以避免内存泄漏。

注意事项

  • weak_ptr 不能直接访问对象,必须通过 lock() 方法获取 shared_ptr 后才能访问。
  • weak_ptr 本身不管理对象的生命周期,因此不会增加引用计数。