This looks like a way to go:
struct my_type_ptr: public std::unique_ptr<my_type,std::default_delete<my_type>>{
using unique_ptr::unique_ptr; //inheriting constructors
//adding copy ctor and assigment operator
my_type_ptr(const my_type_ptr & o):
unique_ptr<my_type,std::default_delete<my_type>>()
{ reset( o ? o->clone() : nullptr); }
my_type_ptr& operator=(const my_type_ptr & o)
{ reset( o ? o->clone() : nullptr); return *this; }
};
It compiles without any warning from gcc and clang, and valgrind doesn't report any memory leak while playing around with copies and vectors.