Seg-Fault bei Konstruktor mit "new" (statt statisch) etc...



  • Hallo Gemeinde,
    ich versuche hier gerade mir ein C++-Progrämmchen zusammen zu basteln.. Und das, wenns geht, ohne Seg-Fault..

    Hier mal ein Beispiel:
    Ich habe 2 Klassen, die voneinander abhängen, aber auch zusammen in einer weiteren Klasse ihr Unwesen treiben..

    class A{
     B *b;
    }
    
    class B{
     A *a;
    }
    
    class C{
     A *aDyn;
     B *bDyn;
    
     C();
    }
    

    ..HALT..
    .....Kennt das jemand: Man kommt mit einem Problem hierher, versucht es zusammenzufassen und verständlich auszuführen, wobei dann die Ursache offensichtlich wird??....
    Kurz gesagt: Hat sich erledigt 😉 - Naja fast..

    Das war zwar nicht das eigentliche Problem, aber warum meckert der Kompilator eigentlich nicht, wenn ich auf Klassen-Vars zugreife, deren Klassen nur als Zeiger existieren (ohne init)??

    Und noch eine kleine Frage: Wie nennt sich eigentlich der Teil im Konstruktor

    D::D() : var1(bla), var2(blö){}
    

    nach dem ":" ??
    Und würde man dynamische Variablen (varEDyn) ähnlich initialisieren? Also zB.

    D::D() : varEDyn(new E(wasAuchImmer)){}
    

    oder macht man das im Körper mit

    D::D(){ varEDyn = new E(wasAuchImmer); }
    

    ?

    MfG
    Glühbirne457



  • Das Ding nennt sich Initialisierungsliste und hat sogar einen eigenen Wikipedia-Artikel: http://de.wikipedia.org/wiki/Initialisierungsliste

    Zu deiner 2. Frage: Ich würde es auch in der Initialisierungsliste machen, aber nicht mit rohen Pointern, sondern mit Smart-Pointern wie zum Beispiel der std::uniqe_ptr.

    // header file
    #include <memory>
    class C{
     std::unique_ptr<A> aDyn;
     std::unique_ptr<B> bDyn;
    
     C();
    }
    
    // source file
    C::C()
        : aDyn(new A())
        , bDyn(new B())
    {}
    

Anmelden zum Antworten