微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用带有 std::unique_ptr 成员的自定义删除器?

如何解决如何使用带有 std::unique_ptr 成员的自定义删除器?

假设createanddestroy是具有以下签名的免费函数(从 OP 的代码片段中似乎就是这种情况):

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

Foo你可以这样写你的课

class Foo {

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

    // ...

public:

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

    // ...
};

请注意,您不需要在此处编写任何 lambda 或自定义删除器,因为destroy它已经是一个删除器。

解决方法

我有一个带有 unique_ptr 成员的类。

class Foo {
private:
    std::unique_ptr<Bar> bar;
    ...
};

Bar 是具有 create() 函数和 destroy() 函数的第三方类。

如果我想std::unique_ptr在一个独立的函数中使用它,我可以这样做:

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

std::unique_ptr作为班级成员,有没有办法做到这一点?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。