shared_ptr 提供了定制析构功能的能力。通过使用自定义的删除器(deleter),可以在 shared_ptr 释放资源时执行特定的清理操作。
下面是使用自定义删除器的示例:
#include <iostream>
#include <memory>
struct Resource
{
Resource() { std::cout << "Resource acquired." << std::endl; }
~Resource() { std::cout << "Resource released." << std::endl; }
};
void CustomDeleter(Resource* resource)
{
std::cout << "Custom deleter called." << std::endl;
delete resource;
}
int main()
{
std::shared_ptr<Resource> sharedResource(new Resource(), CustomDeleter);
// 使用 sharedResource...
return 0;
}
在 main 函数中,我们使用 std::shared_ptr 创建了一个指向 Resource 对象的智能指针 sharedResource,并将自定义删除器传递给它。
通过使用自定义删除器,可以灵活地管理资源的释放过程,以满足特定的需求。
- 管理非常规资源释放:有些资源可能不是通过简单的
delete进行释放,而是需要调用特定的函数、方法或接口来释放。通过使用自定义删除器,可以将这种特定的释放逻辑封装在自定义删除器中,确保资源以正确的方式被释放。 - 处理资源的引用计数:除了释放资源,自定义删除器还可以用于执行其他操作,如更新资源的引用计数。例如,当资源被最后一个
shared_ptr释放时,可以在自定义删除器中执行某些额外的操作,如通知其他相关组件或修改全局状态。 - 与第三方库集成:第三方库可能要求使用特定的释放函数或接口来释放资源,而不是直接调用
delete。通过自定义删除器,可以将第三方库所需的资源释放逻辑与shared_ptr集成起来,使其能够与现有的智能指针机制协同工作。
总之,自定义删除器允许您在释放资源时执行自定义的操作,以满足特定的需求。它提供了更大的灵活性和可扩展性,使 shared_ptr 能够处理各种类型的资源,并与其他组件和库集成。
使用customdelete与直接改写对应资源类的析构函数有什么区别呢?
No comments yet.