weak_ptr和shared_ptr
时间: 2023-11-01 20:07:30 浏览: 120
C++11引入了智能指针的概念,其中包括shared_ptr和weak_ptr。shared_ptr是一种智能指针,它可以自动管理内存,避免内存泄漏和悬挂指针等问题。它的主要特点是可以共享一个对象的所有权,当没有任何shared_ptr指向该对象时,该对象会被自动销毁。而weak_ptr是一种弱引用指针,它可以指向一个由shared_ptr管理的对象,但不会增加该对象的引用计数,也就是说,它不会影响该对象的生命周期。
shared_ptr和weak_ptr的使用方法如下:
```c++
#include <memory>
int main() {
std::shared_ptr<int> sp1(new int(10));
std::shared_ptr<int> sp2 = sp1; // sp1和sp2共享同一个对象
std::weak_ptr<int> wp = sp1; // wp指向sp1所指向的对象,不会增加引用计数
if (auto sp3 = wp.lock()) { // 通过wp.lock()获取sp1所指向的对象的shared_ptr
// 使用sp3指向的对象
}
return 0;
}
```
在上面的代码中,我们首先创建了一个shared_ptr对象sp1,然后将其赋值给另一个shared_ptr对象sp2,这样sp1和sp2就共享同一个对象。接着,我们创建了一个weak_ptr对象wp,它指向sp1所指向的对象,但不会增加引用计数。最后,我们通过wp.lock()方法获取sp1所指向的对象的shared_ptr,如果该对象还存在,则可以使用该shared_ptr指向的对象。
阅读全文