shared_ptr自定义删除器的几种方式
时间: 2023-10-17 14:22:04 浏览: 182
在使用 `std::shared_ptr` 时,有时候需要手动管理资源的释放。为此,可以通过自定义删除器来实现。以下是几种自定义删除器的方式:
#### 1. 函数指针
可以将一个函数指针作为删除器传递给 `std::shared_ptr` 的构造函数。例如:
```cpp
void my_deleter(MyClass* ptr) {
// 自定义的资源释放操作
delete ptr;
}
int main() {
std::shared_ptr<MyClass> p(new MyClass, my_deleter);
// ...
}
```
#### 2. 函数对象
同样可以使用函数对象作为删除器。例如:
```cpp
struct MyDeleter {
void operator()(MyClass* ptr) const {
// 自定义的资源释放操作
delete ptr;
}
};
int main() {
std::shared_ptr<MyClass> p(new MyClass, MyDeleter());
// ...
}
```
#### 3. lambda 表达式
还可以使用 lambda 表达式作为删除器。例如:
```cpp
int main() {
std::shared_ptr<MyClass> p(new MyClass, [](MyClass* ptr) {
// 自定义的资源释放操作
delete ptr;
});
// ...
}
```
#### 4. 继承 std::default_delete
也可以继承 `std::default_delete` 并重载其 `operator()` 方法。例如:
```cpp
struct MyDeleter : public std::default_delete<MyClass> {
void operator()(MyClass* ptr) const {
// 自定义的资源释放操作
delete ptr;
}
};
int main() {
std::shared_ptr<MyClass> p(new MyClass, MyDeleter());
// ...
}
```
以上是几种常见的自定义删除器方式,选择何种方式取决于具体情况和个人喜好。
阅读全文