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
baseauf ein Objekt zeigt, was vonClassAableitet, dann iststatic_cast<ClassA*>(base)ok. Wenn du dir nicht sicher bist, dann sollte das geprüft werden.dynamic_castbietet 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.