How do I use a custom deleter with a std::unique_ptr member?
c++, c++11, move-semantics, unique-ptr
Solution
Assuming that `create` and `destroy` are free functions (which seems to be the case from the OP's code snippet) with the following signatures:
Bar* create();
void destroy(Bar*);
You can write your class `Foo` like this
class Foo {
std::unique_ptr<Bar, void(*)(Bar*)> ptr_;
// ...
public:
Foo() : ptr_(create(), destroy) { /* ... */ }
// ...
};
Notice that you don't need to write any lambda or custom deleter here because `destroy` is already a deleter.
Problem
I have a class with a unique_ptr member. ``` class Foo { private: std::unique_ptr<Bar> bar; ... }; ``` The Bar is a third party class that has a create() function and a destroy() function. If I wanted to use a `std::unique_ptr` with it in a stand alone function I could do: ``` void foo() { std::unique_ptr<Bar, void(*)(Bar*)> bar(create(), [](Bar* b){ destroy(b); }); ... } ``` Is there a way to do this with `std::unique_ptr` as a member of a class?