Using std::make_unique with a custom deleter

c++, c++11, c++14

Solution

The whole point of `make_unique` is to encapsulate the notion of "use `new` to create a `T` from given constructor arguments and use `delete` to destroy it".

If you wanted a custom deleter, you would also have to specify how to create the object, and then there would be nothing more gained from having the emplacing maker function.

I wrote some examples of custom maker functions for certain unique resource handles in this post.

Problem

In using `std::unique_ptr` with a custom deleter I desire to use `std::make_unique` rather than a raw new. I am using VC++2013. It appears to me that there is no way to use `std::unique_ptr` if you are using a custom deleter. Did I miss something or is this really the case? Additional Information: I am using a `std::unique_ptr<HANDLE, custom_deleter>` to hold a Windows HANDLE for an opened COM port. I could write a custom RAII class for this, and it wouldn't be terribly difficult, but I was seeing how hard/difficult/bad it would be to use `std::unique_ptr`.

Original source

Related problems