PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Reihenfolge im Konstruktor



Scavenger
13-05-2004, 16:23
Hallo !

Ich habe eine Klasse mit folgendem Aufbau:

class classA
{
public:
classB b;
classC c;

classA (): b("data"),
c(&b)
{
//irgendwas
};
}

Wenn ich das ganze kompiliere und debugge sieht es so aus, als ob er
"c(&b)" vor b("data") aufruft.

Kann das sein ? Gibt es eine Möglichkeit die Reihenfolge bei solchen Aufrufen festzulegen ? Oder irgendeine andere Lösung ?

Scav.

P.S. In welcher Reihenfolge werden die Destruktoren aufgerufen ?
Was ist, wenn c noch b im Destruktor benötigt, aber b schon gelöscht wurde ?

wraith
13-05-2004, 16:46
Original geschrieben von Scavenger

Wenn ich das ganze kompiliere und debugge sieht es so aus, als ob er
"c(&b)" vor b("data") aufruft.
Die Reihenfolge ist klar festgelegt, und zwar in der Reihenfolge, wie die Member in der Klassendeklaration aufgeführt sind.
Die Reihenfolge in der Initialisierungsliste ist unerheblich, also wird in deinem Fall b vor c aufgerufen (in deinem Fall ist es eh identisch, aber ändere das mal, dann sollte sich der g++ mit einer Warnung melden).
Mach' doch mal ein paar Debug-cout-Ausgaben in dem jeweiligen Konstruktoren, vielleicht besser wie mit dem Debugger.



P.S. In welcher Reihenfolge werden die Destruktoren aufgerufen ?

In umgekehrter Reihenfolge ihrer Erzeugung.

Scavenger
13-05-2004, 17:03
Thx a lot !!

I program with C/C++ for several years, but didn't notice that. :confused:

It solved a lot of the problems I had at the moment. :D

Scav.