I know this kind of questions aren't really welcome here but I must ask: why don't unique_ptr/shared_ptr/etc have an operator= overload for type T?
It would seem more natural to write
std::unique_ptr<int> p = new int(5);
instead of
std::unique_ptr<int> p(new int(5));
or any other more verbose method.