shard_ptr 调用release
时间: 2023-08-12 09:04:10 浏览: 43
在C++的智能指针(如shared_ptr)中,release()函数是用来释放智能指针所管理的对象的所有权,使智能指针不再管理该对象。调用release()函数后,智能指针的计数器变为0,如果没有其他智能指针持有该对象的所有权,该对象就会被自动销毁。
下面是一个示例代码,演示如何使用shared_ptr的release()函数:
```C++
#include <memory>
#include <iostream>
int main() {
// 创建一个shared_ptr对象
std::shared_ptr<int> p(new int(42));
std::cout << *p << std::endl; // 输出42
// 释放p所管理的对象的所有权
int* q = p.release();
// 此时p为空指针,不能再使用它
std::cout << (p == nullptr) << std::endl; // 输出1
// q持有对象的所有权,需要手动释放
std::cout << *q << std::endl; // 输出42
delete q;
return 0;
}
```
在上面的示例代码中,我们首先创建了一个shared_ptr对象p,用来管理一个int类型的对象。然后调用p的release()函数,将p所管理的对象的所有权释放,并返回一个指向该对象的裸指针q。在释放p的所有权后,p变为空指针,不能再使用它。我们可以通过q来访问对象,并在最后手动释放对象的内存。
需要注意的是,一旦调用了release()函数,就需要手动释放对象的内存,否则会出现内存泄漏的问题。因此,在使用release()函数时需要特别小心,确保能够正确地管理对象的内存。