shared_ptr中的自定义删除器
发布时间: 2024-03-26 03:24:18 阅读量: 71 订阅数: 24
# 1. 简介
## 1.1 shared_ptr的概念和用途
在C++中,`shared_ptr`是智能指针的一种,用于管理动态分配的内存资源。它可以跟踪指向共享对象的所有`shared_ptr`实例,并在最后一个`shared_ptr`离开作用域时自动释放对象。
## 1.2 删除器(deleter)的作用和必要性
删除器是`shared_ptr`的一个重要概念,用于在释放内存时执行自定义的清理操作。通过删除器,我们可以在`shared_ptr`释放资源时,执行特定的清理动作,比如释放文件句柄、关闭数据库连接等。
# 2. shared_ptr的基本用法
1. **shared_ptr的构造和初始化**
2. **shared_ptr的拷贝及移动**
3. **shared_ptr的使用注意事项**
# 3. 自定义删除器的作用
自定义删除器是在使用`shared_ptr`管理资源时,可以通过用户自定义的方式指定资源释放的方法。当`shared_ptr`的引用计数变为0时,自定义删除器会被调用,用来释放资源。本章将会介绍自定义删除器的作用、必要性以及使用场景。接下来我们将详细讨论这些内容。
# 4. 实现自定义删除器
自定义删除器是为了在`shared_ptr`释放资源时执行自定义的清理操作而引入的机制。通过自定义删除器,我们可以更灵活地管理共享指针所指向的资源。接下来,我们将介绍如何实现自定义删除器的几种方式。
#### 4.1 使用函数指针作为删除器
在使用函数指针作为删除器时,我们需要定义一个函数,在`shared_ptr`释放资源的时候调用该函数来清理资源。下面是一个简单的示例代码:
```python
import ctypes
# 自定义删除器函数
def custom_deleter(ptr):
print("Custom deleter is called")
ctypes.free(ptr)
# 使用函数指针作为删除器的示例
ptr = ctypes.c_char_p(ctypes.c_char_p(b"Hello World!"))
shared_ptr = ctypes.py_object(ptr)
shared_ptr._destructor_ = custom_deleter
shared_ptr = None # 触发自定义删除器
```
在上面的示例中,我们定义了一个名为`custom_deleter`的函数作为自定义删除器,通过将其赋值给`shared_ptr`对象的`_destructor_`属性,当`shared_ptr`被置为`None`时,便会调用`custom_deleter`函数来释放资源
0
0