std::shared_ptr 如何使用
时间: 2024-09-12 17:14:04 浏览: 45
C++11 std::shared_ptr总结与使用示例代码详解
`std::shared_ptr` 是 C++ 标准库中一个用于实现共享所有权的智能指针。它能够自动管理内存,当没有更多的 `std::shared_ptr` 指向同一个资源时,它会自动释放资源。`std::shared_ptr` 内部通过引用计数来跟踪有多少个 `std::shared_ptr` 实例共享同一个对象,当引用计数降为零时,对象会被删除。
以下是如何使用 `std::shared_ptr` 的基本步骤:
1. 包含头文件:使用 `std::shared_ptr` 需要包含 `<memory>` 头文件。
```cpp
#include <memory>
```
2. 创建 `std::shared_ptr` 对象:可以使用 `std::make_shared` 或者直接使用 `new` 关键字配合 `std::shared_ptr` 构造函数创建。
```cpp
// 使用 std::make_shared
std::shared_ptr<int> ptr1 = std::make_shared<int>(10);
// 使用 new 关键字创建
std::shared_ptr<int> ptr2(new int(20));
```
3. 使用 `std::shared_ptr`:你可以像使用普通指针一样使用 `std::shared_ptr`,包括访问成员和解引用操作。
```cpp
*ptr1 = 30; // 通过指针修改值
int value = *ptr2; // 通过指针访问值
```
4. 通过拷贝或者赋值操作来增加引用计数:当你拷贝一个 `std::shared_ptr` 或者将一个 `std::shared_ptr` 赋值给另一个时,引用计数会增加。
```cpp
std::shared_ptr<int> ptr3 = ptr1; // 增加引用计数
ptr2 = ptr1; // 同样增加引用计数
```
5. 当 `std::shared_ptr` 对象被销毁时,它所管理的资源也会被自动释放。当最后一个 `std::shared_ptr` 被销毁或者被重置时,资源会被释放。
```cpp
ptr1.reset(); // 减少引用计数,若引用计数为零则释放资源
```
6. 可以检查引用计数:通过 `use_count()` 方法可以获取当前有多少个 `std::shared_ptr` 对象指向同一个资源。
```cpp
int count = ptr2.use_count();
```
阅读全文