Mr. Lidström and I had an argumentshared_ptr magia :) :)
la denuncia del Sr. Lidström es que una construcción shared_ptr<Base> p(new Derived);
no requiere de base tenga un destructor virtual:
Armen Tsirunyan:?" Realmente va a la shared_ptr limpiar correctamente? ¿Podrías por favor en este caso demostrar cómo se podría implementar ese efecto?
Daniel Lidström: "El shared_ptr utiliza su propio destructor para eliminar la instancia concreta Esto se conoce como RAII dentro de la ++ comunidad C Mi consejo es que se aprende todo lo que pueda acerca de RAII Se le hará la... La codificación C++ es mucho más fácil cuando usas RAII en todas las situaciones ".
Armen Tsirunyan: "Me sabe de RAII, y también sé que con el tiempo el destructor shared_ptr puede borrar el px almacenado cuando pn llega a 0. Pero si tenía px puntero de tipo estático a
Base
y el puntero de tipo dinámicoDerived
, entonces a menos queBase
tenga un destructor virtual, esto dará como resultado un comportamiento indefinido. Corrígeme si estoy equivocado. "Daniel Lidström: "El shared_ptr conoce el tipo estático es de hormigón Se sabe ya lo pasé en su constructor parece un poco como magia, pero puedo asegurar que es por diseño y extremadamente agradable.! "
Así que, juzgános. ¿Cómo es posible (si lo es) implementar shared_ptr sin requerir que las clases polimórficas tengan destructor virtual? Gracias de antemano
Podría haber vinculado al [tema original] (http://stackoverflow.com/questions/3899688/default-virtual-dtor/3899726). –
@Darin: lo hice. – sbi
Otra cosa interesante es que 'shared_ptr p (new Derived)' también destruirá el objeto 'Derived' por su destructor, independientemente de si es' virtual' o no. –
dalle