H
Hallo,
es gibt noch einen anderen Grund warum eine Klasse gerne mindestens eine nicht-inline-nicht-in-der-h-Datei-implementiert-Methode haben sollte.
Dieser Grud liegt aber auf rein implementationstechnischer Ebene, hat dmzufolge nichts mit Standard-C++ zu tun und gilt nur, wenn die Klasse mindestens eine virtuelle Methode hat.
Einige Compiler verhindern die mehrfache Erstellung einer vtable dadurch, dass sie die vtable für eine Klasse in der ersten cpp-Datei anlegen, in der der Compiler die erste nicht inline, nicht pure virtual function definiert sieht.
Gibt es keine cpp-Datei, legt der Compiler keine vtable an. Im Glücksfall erhält man dann einen Linkerfehler.
Ich habe mir damit aber auch schonmal einen ganz perversen Bug eingehandelt.
Zu beginn der Arbeit hatte meine Klasse noch eine cpp-Datei. Dann habe ich irgendwann alle Methoden geinlined, cpp-Datei weg, trotzdem alte o-Datei (mit der vtable) mitgelinkt -> alte vtable mit falschen Informationen -> Debugging nightmare
Naja, wie gesagt. Das hat nichts mit Standard-C++ zu tun. Ist manchmal aber trotzdem ganz gut zu wissen.
[ Dieser Beitrag wurde am 04.04.2003 um 16:47 Uhr von HumeSikkins editiert. ]