首页 > 后端开发 > C++ > 如何将自定义删除器与 `std::unique_ptr` 类成员一起使用?

如何将自定义删除器与 `std::unique_ptr` 类成员一起使用?

Patricia Arquette
发布: 2024-12-06 07:00:11
原创
922 人浏览过

How to Use Custom Deleters with `std::unique_ptr` Class Members?

将自定义删除器与 std::unique_ptr 成员一起使用

在编程中,使用带有 std::unique_ptr 成员的自定义删除器可以提供更好的效果控制物体的破坏。本文旨在解决如何在类结构中合并自定义删除器的问题。

考虑一个场景,其中类 Foo 包含 std::unique_ptr 类型的成员。 Bar 是一个第三方类,提供 create() 和 destroy() 函数。在独立函数中使用 std::unique_ptr 时,可以采用以下语法:

void foo() {
    std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); });
}
登录后复制

此方法允许使用 lambda 表达式指定自定义删除器。问题出现了:当 std::unique_ptr 用作类的成员时,是否有办法复制此行为?

解决方案:类成员的自定义删除器

假设create和destroy是自由函数,可以实现以下解决方案:

class Foo {

    std::unique_ptr<Bar, void(*)(Bar*)> ptr_;

    // ...

public:

    Foo() : ptr_(create(), destroy) { /* ... */ }

    // ...
};
登录后复制

在这种情况下,自定义删除器直接在类定义中提供。 destroy 函数用作删除器,无需 lambda 表达式。这种方法确保当 Foo 对象超出范围时 Bar 对象被正确销毁。

以上是如何将自定义删除器与 `std::unique_ptr` 类成员一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板