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

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

Susan Sarandon
Susan Sarandon原创
2024-12-08 12:16:11720浏览

How Can I Use Custom Deleters with std::unique_ptr Members in a C   Class?

带有 std::unique_ptr 成员的自定义删除器

在 C 中, std::unique_ptr 类提供了一种管理指针所有权的便捷方法基于对象。但是,如果您正在使用需要自定义删除过程的第三方对象,则在使用 std::unique_ptr 作为类的成员时可能会遇到挑战。

考虑以下场景:您有一个带有 std::unique_ptr 的类成员。 Bar 类来自第三方库,并定义了自己的 create() 和 destroy() 函数,用于对象实例化和销毁。

要在独立函数中使用 std::unique_ptr 与此类场景,您需要可以使用自定义删除器:

void foo() {
    std::unique_ptr<Bar, void (*)(Bar*)> bar(create(), [](Bar* b) { destroy(b); });
    ...
}

但是当 std::unique_ptr 是 a 的成员时,如何实现这一点class?

类成员中的自定义删除器

假设 create 和 destroy 是具有以下签名的自由函数:

Bar* create();
void destroy(Bar*);

您可以定义您的 Foo 类如下:

class Foo {

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

    // ...

public:

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

    // ...
};

在此实现中,您直接提供 destroy 函数作为 std::unique_ptr 的删除器。通过使用自由函数作为删除器,您可以避免使用 lambda 或自定义删除器类。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn