shared_ptr的拷贝
时间: 2023-08-28 09:13:48 浏览: 39
在C++中,可以使用`std::shared_ptr`进行智能指针的拷贝。`std::shared_ptr`是一种共享所有权的智能指针,它可以跟踪多个指针共享的资源,并在不再需要时自动释放这些资源。
当你拷贝一个`std::shared_ptr`时,复制的是指针本身而不是资源。拷贝后,原始的`std::shared_ptr`和新的`std::shared_ptr`将指向相同的资源。引用计数也会增加,以跟踪资源的共享情况。
以下是一个示例:
```cpp
#include <memory>
#include <iostream>
int main() {
std::shared_ptr<int> ptr1 = std::make_shared<int>(42);
std::shared_ptr<int> ptr2 = ptr1; // 拷贝 ptr1
std::cout << "ptr1: " << *ptr1 << std::endl; // 输出 42
std::cout << "ptr2: " << *ptr2 << std::endl; // 输出 42
// 修改其中一个智能指针指向的值
*ptr1 = 99;
std::cout << "ptr1: " << *ptr1 << std::endl; // 输出 99
std::cout << "ptr2: " << *ptr2 << std::endl; // 输出 99
return 0;
}
```
在上面的示例中,我们首先创建了一个`std::shared_ptr` `ptr1`,它指向一个值为42的整数。然后,我们将`ptr1`拷贝给`ptr2`,两个智能指针现在都指向同一个资源。无论是通过`ptr1`还是`ptr2`修改资源的值,另一个智能指针都可以看到这个修改。
使用`std::shared_ptr`时,请注意避免形成循环引用,这可能导致资源无法正确释放。如果存在循环引用的情况,可以改用`std::weak_ptr`来打破循环引用。