weak_ptr智能指针
时间: 2024-08-18 12:01:10 浏览: 55
C++11新特性之智能指针(shared_ptr/unique_ptr/weak_ptr)
5星 · 资源好评率100%
`std::weak_ptr`是C++标准库中的一个智能指针,它是C++11引入的一种轻量级智能指针,主要用于避免循环引用问题。与`std::shared_ptr`不同,`weak_ptr`不持有实际的对象所有权,它不会增加对象的引用计数。当一个`std::shared_ptr`不再被其他`std::shared_ptr`引用时,其持有的对象会被析构;而对于`weak_ptr`来说,即使对象被所有`std::shared_ptr`遗忘,只要有一个`weak_ptr`仍然存在,对象就不会被删除。
下面是一个简单的示例来说明`weak_ptr`的工作原理:
```cpp
#include <memory>
#include <iostream>
class MyClass {
public:
MyClass() { std::cout << "MyClass constructed" << std::endl; }
~MyClass() { std::cout << "MyClass destructed" << std::endl; }
};
int main() {
std::shared_ptr<MyClass> shared1(new MyClass());
std::shared_ptr<MyClass> shared2(shared1); // 引入循环引用
std::weak_ptr<MyClass> weak(shared1);
if (auto owned = shared2.lock()) { // 尝试获取强引用,如果成功则可以访问对象
std::cout << "Object accessible through weak_ptr" << std::endl;
*owned->doSomething(); // 调用成员函数
} else {
std::cout << "Object no longer accessible" << std::endl;
}
return 0;
}
```
在这个例子中,`shared1`和`shared2`形成了循环引用,但通过`weak_ptr`,即使它们不再持有对象,`weak_ptr`仍能检测到对象的存在(因为它只跟踪引用计数)。只有当最后一个`shared_ptr`释放对象时,`MyClass`才会真正被销毁。
阅读全文