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!
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!