Por que unique_ptr usa dois parâmetros de modelo quando shared_ptr usa apenas um?
Ambosunique_ptr
eshared_ptr
aceite um destruidor personalizado para chamar o objeto que eles possuem. Mas no caso deunique_ptr
, o destruidor é passado como um parâmetro de modelo doclasse, enquanto o tipo deshared_ptr
O destruidor personalizado de deve ser especificado como um parâmetro de modelo doconstrutor.
template <class T, class D = default_delete<T>>
class unique_ptr
{
unique_ptr(T*, D&); //simplified
...
};
e
template<class T>
class shared_ptr
{
template<typename D>
shared_ptr(T*, D); //simplified
...
};
Não vejo por que tanta diferença. O que requer isso?