share_ptr reset()函数作用
时间: 2024-05-06 07:19:38 浏览: 9
`shared_ptr`的`reset()`函数有两个作用:
1. 释放当前`shared_ptr`所管理的对象。如果当前`shared_ptr`是最后一个管理该对象的`shared_ptr`,则该对象的内存也被释放。
2. 将当前`shared_ptr`指向一个新的对象。可以传递一个指针作为参数,该指针将被`shared_ptr`所管理。如果不传递参数,则`shared_ptr`将变为空指针,即不管理任何对象。
示例代码:
```c++
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> p1(new int(10));
std::cout << *p1 << std::endl; // 输出 10
p1.reset(new int(20));
std::cout << *p1 << std::endl; // 输出 20
p1.reset(); // p1 变为空指针,不再管理任何对象
if (!p1) {
std::cout << "p1 is null pointer" << std::endl;
}
return 0;
}
```
相关问题
shared_ptr.reset函数
shared_ptr.reset函数是C++中用于重置shared_ptr指针的成员函数。它的作用是将shared_ptr指针重新指向一个新的对象或者释放当前指向的对象。
当调用reset函数时,它会首先释放当前指向的对象(如果有),然后将shared_ptr指针重新指向一个新的对象或者置为空指针。
reset函数有两种常见的用法:
1. 重置为新的对象:可以将reset函数用于将shared_ptr指针重新指向一个新的对象。例如:
```
shared_ptr<int> ptr(new int(10));
ptr.reset(new int(20));
```
在上述代码中,首先创建了一个shared_ptr指针ptr,指向一个值为10的整数对象。然后通过reset函数将ptr重新指向一个值为20的整数对象。
2. 释放当前对象:可以将reset函数用于释放当前指向的对象,即将shared_ptr指针置为空指针。例如:
```
shared_ptr<int> ptr(new int(10));
ptr.reset();
```
在上述代码中,通过reset函数将ptr置为空指针,从而释放了原来指向的整数对象。
需要注意的是,当使用reset函数重置shared_ptr指针时,如果该指针是最后一个引用该对象的shared_ptr指针,那么该对象会被自动销毁。
unique_ptr reset
std::unique_ptr的reset()函数是用于重置(unique_ptr所拥有的资源)的方法。当调用reset()时,unique_ptr会释放当前所拥有的资源(如果存在),并接管新的资源。
例如,假设我们有以下代码:
```cpp
std::unique_ptr<int> ptr(new int(10)); // 创建一个unique_ptr,指向一个动态分配的int对象
ptr.reset(new int(20)); // 重置unique_ptr,释放原来的资源并接管一个新的动态分配的int对象
```
在上述代码中,首先我们创建了一个unique_ptr,它指向一个动态分配的整数对象10。然后,通过调用reset()函数,我们释放了旧的资源(整数对象10),并将unique_ptr的所有权转移到一个新的动态分配的整数对象20。
需要注意的是,调用reset()函数后,unique_ptr会释放原来的资源,并接管新的资源。如果没有提供新的资源,则unique_ptr将被重置为空指针(即不管理任何资源)。
总之,std::unique_ptr的reset()函数用于重置(unique_ptr所拥有的资源)。它可以用于释放旧资源并接管新资源,或者将unique_ptr重置为空指针。