Vererbung: Vater ruft Enkel .. Debug: OK .. Release: Problem

  • C/C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Vererbung: Vater ruft Enkel .. Debug: OK .. Release: Problem

    Situations-Skizze:

    class ZFEN : public CObject

    class SFEN : public ZFEN
    class XFEN : public ZFEN

    class AFEN : public SFEN

    AFEN hat manchmal ein XFEN, aber nicht immer.
    AFEN gibt über GetpXFEN() also NULL oder den Zeiger zurück.

    Problem:

    void ZFEN::Fu(..)
    {
    ...
    ...
    ...

    XFEN *p = ((AFEN *)this)->GetpXFEN();

    if (p != NULL)
    {
    p->Fu(..)
    }
    }

    Im Debug-Modus ist alles OK.

    Hat AFEN ein XFEN wird Fu zweimal aufgerufen!
    Hat AFEN kein XFEN dann nur einmal!

    Im Release-Modus gibt es ein Problem.

    Hat AFEN ein XFEN wird Fu dreimal aufgerufen!
    Das dritte Mal sieht so aus, als würde mit new ein neues Objekt angelegt.

    Was mir klar ist:

    Beim zweiten Aufruf von Fu über p->Fu gibt es natürlich kein AFEN Objekt.
    Im Debug-Modus wird dann für p brav NULL zurückgegeben.

    Meine Fragen:

    Ist das im Debug-Modus Zufall, Glück oder System?
    Ist der Ansatz grundsätzlich so nicht möglich?

    Hinweis:

    Inzwischen habe ich es auf eine andere Weise organisiert.
    Die Frage also nur aus Prinzip!
  • Uiuiui, C++ und Vererbung ist ein ganz schöner Brocken! :D
    Seltsam ist das...

    Aber wie sieht denn GetpXFEN aus?
    Hat ZFEN die GetXFEN-Methode deklariert/definiert oder ist sie erst in AFEN vorhanden?
    Wie der Unterschied zwischen DEBUG und RELEASE kommt, keine Ahnung, vielleicht solltest du so eine Frage aber auch besser in einem C++-Forum stellen :D
    "das war meine letzte flamewar PM an dich ."
  • Problem: GetpXFEN war nicht virtual in ZFEN definiert sondern nur in AFEN.
    Warum im Debug alles funktionierte ist mir nicht ganz klar geworden. Auch warum im Release es 3 mal gerufen wurde bleibt ein Geheimnis.
    Die jetzige Verwendung war so auch nicht geplant. Aber da es im Debug lief .. habe ich halt gedacht .. (DU HÖRST SOFORT AUF ZU DENKEN) ..
    Also habe ich es umgestaltet .. und nun läuft es .. Danke für euere Infos.