将自定义删除器与 std::unique_ptr 成员一起使用
在编程中,使用带有 std::unique_ptr 成员的自定义删除器可以提供更好的效果控制物体的破坏。本文旨在解决如何在类结构中合并自定义删除器的问题。
考虑一个场景,其中类 Foo 包含 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中文网其他相关文章!