在C++中,我们可以自定义一个deleter来管理智能指针的资源释放。通过自定义deleter,我们可以在智能指针析构时执行我们自己的释放逻辑。
下面是一个示例,展示如何自定义deleter来管理一个动态分配的数组:
#include <iostream>
#include <memory>
struct MyArrayDeleter {
template<typename T>
void operator()(T* ptr) const {
std::cout << "Custom deleter is called." << std::endl;
delete[] ptr;
}
};
int main() {
std::unique_ptr<int[], MyArrayDeleter> arr(new int[5]);
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < 5; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
在这个示例中,我们定义了一个名为MyArrayDeleter
的自定义deleter。它是一个函数对象,重载了operator()
,使得它可以像函数一样被调用。
在operator()
中,我们实现了我们自己的释放逻辑,即使用delete[]
来释放动态分配的数组。
在main
函数中,我们使用std::unique_ptr
来管理一个动态分配的整型数组,并指定了我们自定义的deleter类型MyArrayDeleter
。我们可以通过arr[i]
的方式来访问数组元素。
当std::unique_ptr
的生命周期结束时,它会自动调用我们自定义deleter的operator()
,执行我们的释放逻辑。在这个示例中,我们在自定义deleter的operator()
中输出一条消息,以确认我们的自定义deleter被正确调用。
希望对你有帮助!