shared_ptr 绑定数组
时间: 2023-07-18 21:43:12 浏览: 155
shared_ptr
`shared_ptr` 可以绑定数组,但是需要使用 `delete[]` 删除数组所占用的内存。为了避免手动使用 `delete[]` 导致内存泄漏或者二次释放等问题,可以使用 `std::shared_ptr` 提供的自定义删除器来管理数组的内存。
使用 `std::shared_ptr` 绑定数组需要使用 `std::shared_ptr` 的构造函数,并且将数组指针和自定义删除器作为参数传递。例如:
```
#include <memory>
int main() {
int* arr = new int[10]; // 创建数组
std::shared_ptr<int> ptr(arr, std::default_delete<int[]>());
// 使用默认删除器 std::default_delete<int[]>(),管理数组内存
return 0;
}
```
在上面的代码中,我们首先使用 `new` 运算符创建了一个 `int` 类型的数组,然后将其指针和默认的数组删除器 `std::default_delete<int[]>()` 一起传递给了 `std::shared_ptr` 的构造函数。这样就创建了一个 `std::shared_ptr` 对象,它可以安全地管理数组所占用的内存。
需要注意的是,使用 `std::shared_ptr` 绑定数组时,不能使用 `std::make_shared` 函数,因为它不支持自定义删除器。另外,在使用 `shared_ptr` 对象时,应该使用 `get()` 方法获取其所管理的指针,并且不能使用普通指针进行操作,因为 `shared_ptr` 对象在作用域结束时会自动释放其所管理的内存。
阅读全文