Оба 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
...
};
Я не понимаю, почему такая разница. Что требует этого?