弱指针主要特点和用途有哪些

弱指针(Weak Pointer)是 C++11 引入的一种智能指针,用于解决 std::shared_ptr 可能引发的循环引用问题。

与 std::shared_ptr 不同的是,弱指针并不增加引用计数,因此不会影响对象的生命周期。

图片[1]-弱指针主要特点和用途有哪些-不念博客

主要特点和用途

不增加引用计数

弱指针不会增加所指向对象的引用计数。

当最后一个强引用(std::shared_ptr)销毁时,无论弱指针是否存在,引用计数都会减少。

不影响对象生命周期

弱指针不会影响所指向对象的生命周期。

当对象被销毁后,弱指针会被自动置空,不再指向任何对象。

用于解决循环引用

当两个或多个对象相互持有对方的 std::shared_ptr,可能形成循环引用,导致对象无法正确释放。

使用弱指针可以打破循环引用,防止内存泄漏。

使用示例

#include <memory>
#include <iostream>

class MyClass;

int main() {
    std::shared_ptr<MyClass> ptr1 = std::make_shared<MyClass>();
    std::weak_ptr<MyClass> weakPtr = ptr1;

    // 使用弱指针获取共享指针
    if (auto sharedPtr = weakPtr.lock()) {
        std::cout << "Object is still alive." << std::endl;
    } else {
        std::cout << "Object has been destroyed." << std::endl;
    }

    // 释放 ptr1 后,弱指针变为空
    ptr1.reset();

    if (auto sharedPtr = weakPtr.lock()) {
        std::cout << "Object is still alive." << std::endl;
    } else {
        std::cout << "Object has been destroyed." << std::endl;
    }

    return 0;
}
© 版权声明
THE END