weak_ptr
在C++11标准中,除了unique_ptr和shared_ptr,智能指针还包括了weak_ptr这个类模板。weak_ptr的使用更为复杂一点,它可以指向shared_ptr指针指向的对象内存,却并不拥有该内存。使用weak_ptr成员函数lock,则可返回其指向内存的一个shared_ptr对象,且在所指对象内存已经无效时,返回空指针。
为什么会引入weak_ptr呢?它是为了解决shared_ptr循环依赖导致的内存问题而引入的。让我们考虑一个场景,有两个类A和B,都包含指向对方类的shared_ptr指针,这样A指向B,B指向A,引用计数永远不会达到零,两个对象也永远不会被删除。
引入weak_ptr后,声明weak_ptr的类不共享所有权,但是它可以通过lock方法访问这些对象。通过weak_ptr,可以打破A和B之间的循环依赖。