shared_ptr赋值
时间: 2023-10-17 07:34:17 浏览: 95
shared_ptr赋值是指将一个shared_ptr对象赋值给另一个shared_ptr对象。在C++中,shared_ptr是一种智能指针,用于管理动态分配的资源。当你将一个shared_ptr赋值给另一个shared_ptr时,会发生以下情况:
1. 引用计数增加:被赋值的shared_ptr会增加资源的引用计数,表示有多个智能指针共享同一个资源。
2. 资源的所有权转移:如果被赋值的shared_ptr已经拥有了一个资源,它会先释放原来的资源,然后接管被赋值的shared_ptr指向的资源。
3. 引用计数减少:如果被赋值的shared_ptr是原来资源的最后一个拥有者,它会释放资源,并将引用计数设置为0。
shared_ptr提供了赋值运算符重载函数,使得赋值操作更加方便和灵活。下面是一个示例:
```cpp
#include <iostream>
#include <memory>
int main() {
// 创建两个shared_ptr对象,指向同一个资源
std::shared_ptr<int> ptr1 = std::make_shared<int>(10);
std::shared_ptr<int> ptr2 = ptr1;
std::cout << "ptr1: " << *ptr1 << std::endl; // 输出: ptr1: 10
std::cout << "ptr2: " << *ptr2 << std::endl; // 输出: ptr2: 10
// 修改ptr2指向的资源的值
*ptr2 = 20;
std::cout << "ptr1: " << *ptr1 << std::endl; // 输出: ptr1: 20
std::cout << "ptr2: " << *ptr2 << std::endl; // 输出: ptr2: 20
// 重新赋值,ptr2指向新的资源
ptr2 = std::make_shared<int>(30);
std::cout << "ptr1: " << *ptr1 << std::endl; // 输出: ptr1: 20
std::cout << "ptr2: " << *ptr2 << std::endl; // 输出: ptr2: 30
return 0;
}
```
在示例中,当我们将ptr1赋值给ptr2时,ptr2引用计数增加,同时指向了相同的资源。修改其中一个shared_ptr指向的资源的值,另一个shared_ptr也会受影响。当我们重新赋值时,ptr2指向了一个新的资源,原来的资源被释放。
阅读全文