type_info::name für unterschiedliche Klassen immer verschieden?
-
Oh sorry, ich hab deinen Beitrag vorhin zu wenig genau gelesen...
Dann sollte es eigentlich auch ein einfacher Zeiger tun, oder?
-
Nexus schrieb:
Dann sollte es eigentlich auch ein einfacher Zeiger tun, oder?
Ja, nur hast du dann Probleme diesen Zeiger zu vergleichen. Es ist nicht garantiert, dass immer das gleiche Objekt für den gleichen Typen zurückgeliefert wird. Der Vergleich muss also über das Objekt gehen, auf welches der Zeiger zeigt. Dafür ist eben der Wrapper da.
Grüssli
-
Ja, der Wrapper ist halt bequem anzuwenden, weil du dir das Zeiger-Dereferenzieren sparen kannst.

Aber die Lebensdauer von
std::type_info-Objekten ist schon etwas merkwürdig. Ich hätte nicht gedacht, dass die so eine Ausnahme darstellen. Das lädt ja direkt zu Memory Leaks ein...
-
Nexus schrieb:
Das lädt ja direkt zu Memory Leaks ein...
Ist glaube ich sogar legal, nur macht das keiner. In der Regel gibt es genau ein type_info Objekt per Typ und in jede vtable wird ein Zeiger darauf reingepackt. Wenn Dlls ins Spiel kommen, dann kann es mehrere type_info Objekt per Typ geben. Halt einen in jedem Modul. Da der Standard keine Dlls kennt greift er halt auf eine so wage Formulierung zurück.
-
Dravere schrieb:
C++ Standard 98:
Kapitel 5.2.8 Type Identification
Abschnitt 1The result of a typeid expression is an lvalue of static type
const std::type_info(18.5.1) and dynamic typeconst std::type_infoorconstname where name is an implementation-defined class derived fromstd::type_infowhich preserves the behavior described in 18.5.1. The lifetime of the object referred to by the lvalue extends to the end of the program. Whether or not the destructor is called for thetype_infoobject at the end of the program is unspecified.Grüssli
okay, vielen dank!
die lebensdauer der rückgabe von typeid hat mich doch etwas irritiert, aber damit wäre das problem jetzt für mich gelöst. die idee mit dem template von ben04 ist auch nicht schlecht, aber so ist das vorerst doch etwas unkomplizierter. 