static_Cast vs. dynamic_cast



  • Hi, welchen cast würdet ihr z.B. im folgenden Beispiel nehmen, wobei ClassA von Base und ClassB von ClassA abgeleitet ist?

    Base* base = new ClassB();
    ClassA* classA = static_cast<ClassA*>(base);
    		if (classA )
    		{
    

    Ich habe hier nur einen static_cast verwendet, da in dem Programmteil nur Objekte von ClassA sowie deren abgeleiteten Klassen verwendet werden und da man dynamic_casts ja nach Möglichkeit vermeiden soll und diese zudem sehr langsam sein sollen. Ist dieses Vorgehen so sinnvoll oder sollte ich doch lieber einen dynamic_cast nehmen.



  • ... da man dynamic_casts ja nach Möglichkeit vermeiden soll ...

    Ja, aber nicht weil sie so langsam sind, sondern weil es meist nach einem schlechten Design stinkt.

    Wenn du dir ganz sicher bist, dass base auf ein Objekt zeigt, was von ClassA ableitet, dann ist static_cast<ClassA*>(base) ok. Wenn du dir nicht sicher bist, dann sollte das geprüft werden. dynamic_cast bietet dir eine solche Prüfung zur Laufzeit an. Dafür muss aber die Basis-Klasse polymorph sein. Sonst klappt es nicht und der Compiler beschwert sich.


Anmelden zum Antworten