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!


Anmelden zum Antworten