Beide Ansätze sehen für mich korrekt aus, solange die dynamic_cast
die Logik korrekt behandelt den Fall, dass die dynamic_cast
nullptr
zurückgibt.
Im zweiten Fall bedeutet dies, dass, wenn Sie sich entscheiden, dass Sie etwas brauchen, es tatsächlich nicht da sein kann (wenn dynamic_cast
nullptr
zurückgibt).
Unter der Annahme, dass die nullptr
Probleme für beide Ansätze ausgearbeitet werden, hängt der beste Ansatz von Ihrer erwarteten Verwendung von sub_list[i]
für Ihren "Durchschnitt" i
ab. Wenn erwartet wird, dass fast jedes Mitglied sub_list
mehr als einmal verwendet wird, ist es am besten, wie Sie es haben (der erste Weg).
Begründung: dynamic_cast
ist nicht frei. Im ersten Ansatz, Sie dynamic_cast
einmal für jeden sub_list[i]
, und dann können Sie es mehrmals verwenden.
Im zweiten Ansatz müssen Sie dynamic_cast
einmal pro Verwendung. Dies wird in dem Fall gewinnen, dass Sie Zeiger in sub_list
setzen und später entscheiden, sie nicht zu verwenden. Wenn dies viel passiert, können Sie vermeiden, dass dynamic_cast
für diese Zeiger verschoben, aber nicht verwendet wird.
Wenn Sie jeden Zeiger, der in sub_list
eingegeben wird, immer genau einmal verwenden, sollten die beiden Ansätze in der Leistung (und Korrektheit) identisch sein.
Was ist die Beziehung zwischen "Basis" und "abgeleitet"? Denn wenn es das ist, was Sie vermuten lassen, dann haben Sie entweder Dinge rückwärts oder machen Polymorphismus falsch. –