Оба unique_ptr и shared_ptr принимают пользовательский деструктор для вызова объекта, которому они принадлежат. Но в случае unique_ptr деструктор передается как шаблонный параметр класса, тогда как тип shared_ptr настраиваемого деструктора должен быть указан как шаблонный шаблон конструктора.
template <class T, class D = default_delete<T>>
class unique_ptr
{
unique_ptr(T*, D&); //simplified
...
};
и
template<class T>
class shared_ptr
{
template<typename D>
shared_ptr(T*, D); //simplified
...
};
Я не понимаю, почему такая разница. Что требует этого?