问题描述
假设create
anddestroy
是具有以下签名的免费函数(从 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
作为班级成员,有没有办法做到这一点?