The std::unique_ptr template has two parameters: the type of the pointee, and the type of the deleter. This second parameter has a default value, so you usually just write somet
Another reason, in addition to the one pointed out by DeadMG, would be that it's possible to write
std::unique_ptr a(new int[100]);
and ~unique_ptr will call the correct version of delete (via default_delete<_Tp[]>) thanks to specializing for both T and T[].
~unique_ptr
delete
default_delete<_Tp[]>
T
T[]