unique_ptr smart punteros inteligentes c++ c++11 smart-pointers

c++ - smart - ¿Por qué unique_ptr:: reset no tiene sobrecargas que requieren un borrado?



smart pointers c++11 (2)

Pensé en agregar eso, pero puede obtener la funcionalidad equivalente con un operador de asignación de movimiento:

ptr = unique_ptr<T, D>(new T(another_value), D(another_state));

Así que opté por no decir lo mismo con el reset en aras de mantener la API razonablemente pequeña.

Actualizar

Y vivo y aprendo ...

La sintaxis puede ser mucho más simple de lo que muestro arriba:

ptr = {new T(another_value), D(another_state)};

¿Hay alguna razón por la que unique_ptr::reset no tenga sobrecargas que const deleter& una const deleter& y deleter&& para que coincidan con los constructores que las toman como segundo argumento?

El borrado almacenado en unique_ptr sería una copia asignada o un movimiento asignado con el argumento de reset . Si el borrado no se puede copiar o no se puede mover, no se compilará la sobrecarga correspondiente del reset . Esto parece que sería un comportamiento consistente con los constructores.


Porque el deleter se almacena en el objeto en construcción. Como el tipo de eliminación es un argumento de plantilla, después de la construcción no hay forma de "convertir" la clase para usar otra.