shared_ptr magic :)

Sr. Lidström e eu tivemos uma discussão :)

A afirmação do Sr. Lidström é que uma construçãoshared_ptr<Base> p(new Derived); não requer que o Base tenha um destruidor virtual:

Armen Tsirunyan: "Sério? Será que oshared_ptr limpar corretamente? Você poderia, por favor, demonstrar como esse efeito poderia ser implementado? "

Daniel Lidström: "Oshared_ptr usa seu próprio destruidor para excluir a instância Concrete. Isso é conhecido como RAII na comunidade C ++. Meu conselho é que você aprenda tudo o que puder sobre a RAII. Isso tornará sua codificação C ++ muito mais fácil quando você usar RAII em todas as situações. "

Armen Tsirunyan: "Eu sei sobre o RAII e também sei que, eventualmente, oshared_ptr O destruidor pode excluir o px armazenado quando pn atingir 0. Mas se o px tiver um ponteiro de tipo estático paraBase e ponteiro de tipo dinâmico paraDerived, a menos queBase possui um destruidor virtual, isso resultará em um comportamento indefinido. Corrija-me se eu estiver enganado."

Daniel Lidström: "Oshared_ptr sabe que o tipo estático é concreto. Ele sabe disso desde que eu passei no seu construtor! Parece um pouco mágico, mas posso garantir que é por design e extremamente agradável ".

Então, nos julgue. Como é possível (se for) implementarshared_ptr sem exigir classes polimórficas para ter destruidor virtual? desde já, obrigado

questionAnswers(3)

yourAnswerToTheQuestion