Geschwindigkeit?
-
Hi ich wollte mal eine Frage zur Geschwindigkeit stellen:
Ich habe viele verschiedene Klassen, ich muss in meinem Programm von einer Liste aus auf Instanzen dieser Klassen zugreifen, dazu habe ich folgendes gemacht:
Eine Basisklasse von der alle anderen erben:
class Object { public: Object(); ~Object(); virtual void Draw(); virtual void Move(); // u.s.w. };
Alle meine Klassen erben von dieser Klasse wobei ich die Methoden wie Draw(); in den Klassen redefiniere.
Dann habe ich meine Liste:
vector <Object> *liste;
Diese Liste fülle ich nun mit den Adressen der Instanzen meiner Klassen, so kann ich bequem von einem Pointer aus auf alle Klassen-Typen zugreifen (is in meinem Fall nötig). Das funkt wunderbar, ich erinnere mich allerdings mal gelesen zu haben dass das auf die Geschwindigkeit drückt, nun wollte ich ncohmal nachfragen wie das mit dem Speed in dem Fal is, könnte sich das bei extrem vielen aufrufen über die "Pointerliste" bemerkbar machen?
-
Profielen geht über glauben,
zum Thema virtuell, virtuell kostet nicht wirklich viel z.b. in C# und Java sind alle Methoden Default virtuell oder in DX9 wird seid neusten auch mit virtuellen Methoden gearbeitet.
Hier ein bsp was sich hinter virtuell verstecktclass Object { public: Object() {} ~Object(){} virtual void Draw() { } }; //wird zu, class Objekt { protect: typedef void(draw_funktion_typ)(); draw_funktion_typ * draw_funktion_; public: Object() {} ~Object(){} virtual void Draw() { draw_funktion(); } } class D : public Objekt { public: D() { draw_funktion = &D::draw; } void draw() { } }; // dieser Code benutzt hier normale Funktions-Pointer // nötig wären hier aber Methoden Pointer // die ich aber um das bsp Leicht zu halten weggelassen habe
Ausführlicher nachzulesen in OOP für Dummies.
Man kann keine Allgemeine gültige Aussage treffen, aber ich sehe "draw" das heißt für mich 99% der zeit geht für das zeichnen drauf.