关于shared_ptr还提供了自定义删除器的功能,请详细说明
时间: 2023-08-16 22:08:35 浏览: 158
shared_ptr 是 C++11 中提供的一种智能指针,它可以自动管理动态分配的内存,并在不需要时自动释放内存,避免了内存泄漏等问题。shared_ptr 还提供了自定义删除器的功能,通过自定义删除器,我们可以更灵活地管理内存。
删除器是一个函数对象,用于在 shared_ptr 对象释放资源时执行一些额外的操作。shared_ptr 提供了两种方式来指定删除器,一种是通过构造函数传递一个函数对象,另一种是通过 reset 函数传递一个函数对象。
自定义删除器可以用于以下场景:
1. 动态分配的内存不是通过 new 关键字分配的,而是通过其他方式分配的,例如 mmap、malloc 等。
2. 动态分配的内存需要在释放之前执行一些额外的操作,例如释放资源时需要关闭文件句柄、释放锁等。
下面是一个使用自定义删除器的示例代码:
```c++
#include <iostream>
#include <memory>
void my_deleter(int* p) {
std::cout << "Deleting memory at " << p << std::endl;
delete p;
}
int main() {
std::shared_ptr<int> p(new int(10), my_deleter);
// 使用 reset 函数传递删除器
p.reset(new int(20), my_deleter);
return 0;
}
```
在以上示例代码中,我们通过构造函数和 reset 函数分别传递了一个自定义删除器 my_deleter,当 shared_ptr 对象释放资源时,my_deleter 函数会被调用,输出一条消息表示正在删除内存。
阅读全文