Mr. Lidström and I had an argument :)magie shared_ptr :)
la demande de M. Lidström est qu'une construction shared_ptr<Base> p(new Derived);
ne nécessite pas de base d'avoir une destructor virtuelle:
Armen Tsirunyan: « Vraiment Est-ce que la shared_ptr nettoyer correctement? Pourriez-vous s'il vous plaît dans ce cas démontrer comment cet effet pourrait être mis en œuvre? "
Daniel Lidström: « Le shared_ptr utilise son propre destructor pour supprimer l'instance béton Ceci est connu comme RAII dans le C++ communauté Mon conseil est que vous apprenez tout ce que vous pouvez sur RAII Il fera de votre... Codage C++ tellement plus facile lorsque vous utilisez RAII dans toutes les situations. "
Armen Tsirunyan: « Je sais à propos RAII, et je sais aussi que finalement le shared_ptr destructor peut supprimer le px stocké lorsque atteint pn 0. Mais si px avait pointeur de type statique à
Base
et pointeur de type dynamiqueDerived
, puis à moins queBase
ait un destructeur virtuel, cela entraînera un comportement indéfini Corrigez-moi si je me trompe. "Daniel Lidström: « Le shared_ptr connaît le type statique est en béton Il sait depuis je l'ai passé dans son constructeur semble un peu comme par magie, mais je peux vous assurer qu'il est par la conception et extrêmement agréable.! "
Alors, jugez-nous. Comment est-il possible (si c'est le cas) d'implémenter shared_ptr sans avoir besoin de classes polymorphes pour avoir un destructeur virtuel? Merci à l'avance
Vous pourriez avoir lié au [fil d'origine] (http://stackoverflow.com/questions/3899688/default-virtual-dtor/3899726). –
@Darin: Je l'ai fait. – sbi
Une autre chose intéressante est que 'shared_ptr p (new Derived)' détruira aussi l'objet 'Derived' par son destructeur, que ce soit' virtual' ou non. –
dalle