带有 std::unique_ptr 成员的自定义删除器
在 C 中, std::unique_ptr 类提供了一种管理指针所有权的便捷方法基于对象。但是,如果您正在使用需要自定义删除过程的第三方对象,则在使用 std::unique_ptr 作为类的成员时可能会遇到挑战。
考虑以下场景:您有一个带有 std::unique_ptr
要在独立函数中使用 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中文网其他相关文章!