Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
class MeineKlasse { MeineKlasse(); ~MeineKlasse(); virtual void IrgendeineFunk()=0; virtual void NocheineFunk()=0; } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
class Base1 { public: Base1() { int x = 0; } virtual ~Base1() { int x = 0; } virtual void GetSomething() = 0; }; class Derived : public Base1 { public: Derived(int a, int b) { int x = 0; } virtual ~Derived() { int x = 0; } void GetSomething() { int x = 0; } }; int main() { Derived* d = new Derived(3,4); d->GetSomething(); delete d; return 0; } |
Zitat
Eine virtuelle Methode hat zur Folge, dass eine vtable erzeugt wird. Alle Zugriffe laufen dann über die vtable und man bekommt dadurch einen Performance Hit. Die Frage ist also, ob es sich lohnt eine virtuelle Methode einzusetzen, wenn diese überhaupt nicht nötig ist!
Zitat
Hab ich da was falsch verstanden oder muss man den Desturktor nur wenn virtuelle Funktionen in der Klasse verhanden sind auch als virtuell deklarieren. Ich dachte, dass man dies mei reinvirtuellen Klassen nicht machen muss, da ja gar keine Instance davon gebildet werden kann.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Fehler { virtual voif foo () = 0; } class Klasse : public Fehler { ~Klasse () { cout << "Trallala\n";} } int main () { Fehler * fehler; fehler = new Klasse (); delete fehler; // kein "Trallala", da der D'tor der Basis aufgerufen wird, statt der von "Klasse" :( } |
Werbeanzeige