c++shared_ptr用法
时间: 2023-11-26 07:03:14 浏览: 47
shared_ptr是C++11标准库中提供的智能指针之一,用于管理动态分配的对象,它可以自动释放所管理的对象,并且可以跟踪对象的引用计数。
使用shared_ptr可以避免内存泄漏和野指针的问题。下面是shared_ptr的基本用法:
1. 创建shared_ptr对象:
```cpp
#include <memory>
std::shared_ptr<int> ptr(new int(10));
```
2. 使用shared_ptr对象:
```cpp
int value = *ptr; // 解引用获取所指向的对象
```
3. 多个shared_ptr共享同一个对象:
```cpp
std::shared_ptr<int> ptr1 = std::make_shared<int>(10);
std::shared_ptr<int> ptr2 = ptr1; // 多个shared_ptr共享同一个对象
```
4. 获取引用计数:
```cpp
int count = ptr.use_count(); // 获取当前对象的引用计数
```
5. 释放对象:
```cpp
ptr.reset(); // 手动释放对象,引用计数减一
```
相关问题
c++shared_ptr
C++中的`shared_ptr`是一种智能指针,用于管理动态分配的资源。它允许多个指针共享同一个对象,而不会导致资源的重复释放。`shared_ptr`使用引用计数的方式来跟踪对象的使用情况,并在没有任何指针引用该对象时自动释放相关资源。
要使用`shared_ptr`,你首先需要包含头文件`<memory>`。然后,可以使用`std::shared_ptr`模板类来创建智能指针对象。例如:
```cpp
#include <memory>
int main() {
// 创建一个shared_ptr来管理动态分配的整数对象
std::shared_ptr<int> ptr(new int(42));
// 使用shared_ptr时,可以像使用原始指针一样访问对象
std::cout << *ptr << std::endl;
// 其他shared_ptr可以共享同一个对象
std::shared_ptr<int> ptr2 = ptr;
// 引用计数增加为2,对象仍然存在
// 可以通过重置智能指针来释放对象
ptr.reset();
// 引用计数减为1,对象仍然存在
// 最后一个指向对象的shared_ptr被销毁时,对象才会被释放
ptr2.reset();
return 0;
}
```
这只是`shared_ptr`的基本用法示例。它还提供了其他功能,如自定义删除器、数组支持等。使用`shared_ptr`可以更方便地管理动态分配的资源,避免内存泄漏和悬空指针等问题。
c++ shared_ptr
C++ 的 `std::shared_ptr` 是一个智能指针,用于管理动态分配的对象的所有权。它允许多个 `shared_ptr` 实例共享同一个对象,并在最后一个 `shared_ptr` 被销毁时自动释放对象内存。
以下是一些关于 `std::shared_ptr` 的基本用法:
1. 创建 `shared_ptr`:
```cpp
std::shared_ptr<int> ptr(new int(10));
```
2. 访问对象:
```cpp
int value = *ptr; // 解引用获取对象值
```
3. 复制和共享:
```cpp
std::shared_ptr<int> ptr1 = ptr; // 共享资源
std::shared_ptr<int> ptr2(ptr); // 复制资源
```
4. 空指针检查:
```cpp
if (ptr) {
// 执行代码
}
```
5. 释放资源:
```cpp
ptr.reset(); // 释放资源,将引用计数减一
```
6. 使用自定义删除器:
```cpp
struct CustomDeleter {
void operator()(int* ptr) {
// 自定义删除器操作
delete ptr;
}
};
std::shared_ptr<int> ptr(new int, CustomDeleter());
```
请注意,当最后一个 `shared_ptr` 被销毁时,它会自动调用删除器或者 `delete` 来释放资源。
`std::shared_ptr` 是 C++11 引入的标准库组件,在多线程环境中也提供了一些线程安全的操作。它是一种强大的工具,能够帮助您管理动态分配的对象,避免内存泄漏和悬垂指针等问题。