M. Lidström et moi a eu un argument : M. Lidström est qu'une construction shared_ptr<Base> p(new Derived);
ne nécessite pas de Base pour avoir un destructeur virtuel.
@Daniel: Vraiment? Sera le shared_ptr nettoyer correctement? Pourriez-vous s'il vous plaît dans ce cas, de démontrer comment cet effet pourrait être mis en œuvre? – Armen Tsirunyan
@Armen: shared_ptr utilise sa propre destructeur pour supprimer le Béton instance. Ceci est connu comme RAII dans le C++ de la communauté. Mon conseil est que vous apprenez tout ce que vous pouvez au sujet de RAII. Il fera de votre codage C++ donc beaucoup plus facile lorsque vous utilisez RAII dans toutes les situations. – Daniel Lidström
@Daniel: je connais la RAII, et je sais aussi que, finalement, les shared_ptr destructeur peut supprimer le nom d'px lorsque pn atteint 0. Mais si px avait statique de type pointeur vers la Base et des dynamiques de type pointeur vers Dérivés, alors à moins que la Base a un destructeur virtuel, cela se traduira par un comportement indéfini. Corrigez-moi si je me trompe. – Armen Tsirunyan
@Armen: shared_ptr sait le type statique est en Béton. Il le sait depuis que j'ai passé dans son constructeur! Semble un peu comme de la magie, mais je peux vous assurer qu'il est voulu par la conception et extrêmement agréable. – Daniel Lidström
Donc, jugde nous. Comment est-il possible (si elle est) afin de mettre en œuvre des shared_ptr sans exiger polymorphes classes ont destructeur virtuel? Merci d'avance