c++ std::weak_ptr使用笔记
std::weak_ptr
是 C++ 标准库中的智能指针,用于解决 std::shared_ptr
的循环引用问题。它不拥有资源的所有权,而是观察 std::shared_ptr
管理的资源。当需要访问资源时,可以通过 std::weak_ptr
临时获取一个 std::shared_ptr
。以下是 std::weak_ptr
的简单使用方法:
1. 基本用法
#include <iostream>
#include <memory>
int main() {
// 创建一个 shared_ptr
std::shared_ptr<int> sharedPtr = std::make_shared<int>(42);
// 创建一个 weak_ptr,观察 sharedPtr
std::weak_ptr<int> weakPtr(sharedPtr);
// 使用 weak_ptr 获取 shared_ptr
if (auto tempSharedPtr = weakPtr.lock()) {
std::cout << "Value: " << *tempSharedPtr << std::endl;
} else {
std::cout << "Resource has been released" << std::endl;
}
// 释放 sharedPtr
sharedPtr.reset();
// 再次尝试获取 shared_ptr
if (auto tempSharedPtr = weakPtr.lock()) {
std::cout << "Value: " << *tempSharedPtr << std::endl;
} else {
std::cout << "Resource has been released" << std::endl;
}
return 0;
}
2. 解决循环引用问题
std::weak_ptr
的主要用途是解决 std::shared_ptr
的循环引用问题。以下是一个示例:
#include <iostream>
#include <memory>