Quick A: Because
unique_ptr is designed to be zero-overhead, whereas
shared_ptr already allocates space and can easily store the type-erased deleter.
Recently on SO:
I thought it is very curious when I discovered that the standard defines std::unique_ptr and std::shared_ptr in two totally different ways regarding a Deleter that the pointer may own.