首页 > 后端开发 > C++ > 正文

C++中如何实现自定义删除器 智能指针中自定义资源释放方法

P粉602998670
发布: 2025-06-29 13:03:02
原创
875人浏览过

c++++中使用智能指针时,若需自定义资源释放逻辑,可通过绑定删除器实现,具体方式因指针类型而异。1. unique_ptr需显式指定删除器类型并传入函数或仿函数,如void my_deleter(myresource* ptr),构造时传递其地址;2. shared_ptr可直接接受可调用对象作为删除器,无需额外模板参数,支持函数、lambda、仿函数等;3. 设计删除器时应避免抛出异常、避免捕获外部状态的lambda、注意删除器类型影响指针兼容性,并避免耗时操作。例如管理文件句柄时可用lambda执行fclose。掌握这些要点有助于正确高效地处理特殊资源。

C++中如何实现自定义删除器 智能指针中自定义资源释放方法

在 C++ 中使用智能指针时,如果默认的资源释放方式不满足需求(比如操作的是非内存资源、需要特殊清理逻辑等),就需要自定义删除器。智能指针如 std::unique_ptr 和 std::shared_ptr 都支持传入自定义删除器来控制资源释放过程。

C++中如何实现自定义删除器 智能指针中自定义资源释放方法

1. unique_ptr 如何绑定自定义删除器

unique_ptr 默认会调用 delete 来释放资源,但你可以通过模板参数指定删除器类型,并在构造时传入具体的删除函数或仿函数。

C++中如何实现自定义删除器 智能指针中自定义资源释放方法

基本写法:

立即学习C++免费学习笔记(深入)”;

void my_deleter(MyResource* ptr) {
    // 自定义清理逻辑
    delete ptr;
}

std::unique_ptr<MyResource, decltype(&my_deleter)> ptr(new MyResource(), &my_deleter);
登录后复制

注意这里必须显式指定第二个模板参数为函数指针类型,否则编译器无法推导出删除器类型。

C++中如何实现自定义删除器 智能指针中自定义资源释放方法

如果你希望更简洁地管理删除器,可以用 lambda 表达式结合 std::function 或者使用 std::unique_ptr 的别名模板。


2. shared_ptr 更灵活的删除器支持

相比 unique_ptr,shared_ptr 在构造时可以直接接受一个可调用对象作为删除器,不需要额外指定模板参数,使用起来更加方便。

示例:

auto my_deleter = [](MyResource* ptr) {
    // 执行一些清理工作
    delete ptr;
};

std::shared_ptr<MyResource> ptr(new MyResource(), my_deleter);
登录后复制

这里的删除器可以是函数、lambda、仿函数,甚至 std::function 对象。shared_ptr 内部会拷贝这个删除器并保存下来,在最后一个引用失效时调用它。

需要注意的一点是,删除器和资源是绑定在一起的,即使你把 shared_ptr 转换成了指向基类的指针,删除器也会保持正确的行为。


3. 删除器的设计注意事项

设计删除器时有几个细节容易被忽略:

  • 删除器不能抛出异常:因为资源释放通常发生在析构过程中,一旦抛出异常可能导致程序崩溃。
  • 避免捕获外部状态的 lambda:如果你用了带捕获的 lambda 做删除器,确保其生命周期足够长,或者不会造成悬空引用。
  • 删除器类型会影响智能指针的类型:对于 unique_ptr,不同的删除器会导致不同的指针类型,影响赋值兼容性。
  • 不要在删除器中做耗时操作:尤其是在多线程环境下,长时间执行删除器可能会影响性能。

举个例子,如果你管理的是文件句柄或其他系统资源,删除器里可能不只是 delete,还可能是 fclose、close(fd) 等:

auto file_deleter = [](FILE* f) { if (f) fclose(f); };
std::shared_ptr<FILE> fp(fopen("test.txt", "r"), file_deleter);
登录后复制

这样就能安全地自动关闭文件了。


基本上就这些。自定义删除器虽然不是每天都要用的功能,但在处理特殊资源时非常有用,理解它的使用方式和限制能让你写出更健壮的代码。

以上就是C++中如何实现自定义删除器 智能指针中自定义资源释放方法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号