Desde boost::/std::shared_ptr
tienen la ventaja de tipo de borrado de su Deleter, se pueden hacer cosas agradables como¿Se necesita un destructor virtual para su interfaz, si siempre lo almacena en un shared_ptr?
#include <memory>
typedef std::shared_ptr<void> gc_ptr;
int main(){
gc_ptr p1 = new int(42);
gc_ptr p2 = new float(3.14159);
gc_ptr p3 = new char('o');
}
y esto va a eliminar correctamente todos puntero gracias a la Deleter correcta se salvan.
Si se asegura de que cada implementación de su interfaz siempre se crea con shared_ptr<Interface>
(o make_shared<Interface>
), ¿realmente necesita un destructor virtual
? Lo declararía virtual
de todos modos, pero solo quiero saber, ya que shared_ptr
siempre eliminará el tipo con el que se inicializó (a menos que se proporcione otro eliminador personalizado).
posible duplicado de [shared_ptr magic:)] (http://stackoverflow.com/questions/3899790/shared-ptr-magic) –
@Armen: Esto no es un duplicado, no pregunta cómo 'shared_ptr' hace pero si debe usar un destructor virtual * sabiendo * que 'shared_ptr' hace esa magia. –
@David: No, no lo hace. Él dice que usará un destructor virtual de todos modos. Él pregunta si está bien no tener uno. Entonces es un duplicado –