弱指针(Weak Pointer)是 C++11 引入的一种智能指针,用于解决 std::shared_ptr 可能引发的循环引用问题。
与 std::shared_ptr 不同的是,弱指针并不增加引用计数,因此不会影响对象的生命周期。
主要特点和用途
不增加引用计数
弱指针不会增加所指向对象的引用计数。
当最后一个强引用(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