shared_ptr magic:)

Herr. Lidström und ich hatten einen Streit:)

Herr. Lidströms Behauptung ist, dass ein Konstruktshared_ptr<Base> p(new Derived); erfordert nicht, dass Base einen virtuellen Destruktor hat:

Armen Tsirunyan: "Wirklich? Wird das shared_ptr richtig aufräumen? Könnten Sie bitte in diesem Fall zeigen, wie dieser Effekt umgesetzt werden könnte? "

Daniel Lidström: "Das shared_ptr verwendet einen eigenen Destruktor, um die Concrete-Instanz zu löschen. Dies wird in der C ++ - Community als RAII bezeichnet. Mein Rat ist, dass Sie alles über RAII lernen, was Sie können. Es wird Ihre C ++ - Codierung so viel einfacher machen, wenn Sie RAII in allen Situationen verwenden. "

Armen Tsirunyan: "Ich weiß über RAII Bescheid, und ich weiß auch, dass irgendwann das shared_ptr destructor kann das gespeicherte px löschen, wenn pn 0 erreicht. Wenn px jedoch einen statischen Typzeiger auf @ hBase und dynamischer Typzeiger aufDerived, dann außerBase hat einen virtuellen Destruktor, dies führt zu undefiniertem Verhalten. Korrigiere mich, wenn ich falsch liege. "

Daniel Lidström: "Das shared_ptr weiß, dass der statische Typ Beton ist. Es weiß das, seit ich es in seinem Konstruktor übergeben habe! Scheint ein bisschen wie Magie, aber ich kann Ihnen versichern, dass es von Natur aus und extrem nett ist. "

Also, urteile uns. Wie ist es möglich (wenn es ist), @ zu implementier shared_ptr ohne dass polymorphe Klassen einen virtuellen Destruktor benötigen? Danke im Vorau

Antworten auf die Frage(6)

Ihre Antwort auf die Frage