Konstruktorverhalten nicht nachvollziehbar
-
Ich habe eine Klasse mit zwei Konstruktoren, einer davon ist der Default-ctor()
class Foo{ Foo(); Foo(int); }; }Wenn der Zweite Konstruktor aufgerufen wird soll eigentlich genau das passieren, was im ersten passiert, nur das int noch mitgespeichert wird.
Also dachte ich mir, dass ich ihn so realisiere:Foo::Foo(int i) { Foo() m_i = i; }Foo() wird auch aufgerufen und die Klasse richtig initialisiert, aber sobald Foo() verlassen wird steht wieder Müll in den Variablen. Wieso?
-
Konstruktoren können sich nicht gegenseitig aufrufen - der Aufruf im int-Ctor erzeugt ein temporäres Objekt, das sofort wieder zerstört wird.
Du könntest höchstens die Initialisierung in eine gesonderte Methode auslagern, die von beiden Ctoren aufgerufen wird:
class Foo { public: Foo() {init();} Foo(int v) { init(); m_iv = v; } private: void init(); int m_iv; ... }(oder du verwendest Default-Parameter "Foo(int v=0);")
-
ah ok, danke!