shared_ptr von Basisklasse sicher?
-
Hi,
Ich habe eine Basisklasse A und einige Subklassen B,C etc die von A erben.
Ist es jetzt gültiger und sicherer Code, wenn ich einen shared_ptr von A anlege und Subklassen da rein stecke?
Also:std::tr1::shared_ptr<A> aPtr; aPtr = new B; aPtr = new C; aPtr->methode(); // ruft das jetzt C::methode() auf, wenn methode() virtuell istKann man das so machen? Oder darf ich in aPtr nur auf "new A" zeigen lassen?
-
Das ist gut so, sofern Polymorphie bei den Klassen korrekt genutzt wurde (für Korrektheit im besonderen der Destruktor).
-
drakon schrieb:
Das ist gut so, sofern Polymorphie bei den Klassen korrekt genutzt wurde (für Korrektheit im besonderen der Destruktor).
Virtuelle Destruktoren sind für
shared_ptrnicht einmal nötig, wenn dieser mit dem dynamischen Typen des Objekts initialisiert wird. Es ist dennoch empfehlenswert, bei polymorpher Verwendung den Destruktor virtuell zu machen, besonders wenn Objekte der Klasse nicht nur inshared_ptrs gehalten werden.KlausRR schrieb:
Kann man das so machen?
Ja. Im Bezug auf Polymorphie verhält sich
shared_ptr<A>nahezu gleich wieA*. Statt des Zuweisungsoperators müsstest du allerdingsreset()verwenden.