Liste mit Pointern auf structs



  • Hallo zusammen.

    Nehmen wir an ich habe folgende Struktur (alle Klassen aus der STL):

    typedef struct
    {
      int    a;
      string b;
    } Test;
    

    Und dazu eine Liste mit Pointern auf Test und eine Instanz von Test:

    list<Test*> tListe;
    Test t;
    

    Kann ich jetzt, nachdem ich t.a und t.b Werte zugewiesen habe, in der Liste einen Pointer auf eine Kopie von t einfügen?

    tListe.insert(tListe.begin(), new Test(t));
    

    Oder funktioniert das so nicht? Ich arbeite so gut wie nie mit structs...

    Danke für eure Hilfe.
    Walli



  • In C++ wird der typdef fürs struct nicht verwendet.
    struct und class sind in C++ bis auf die default Sichtbarkeit gleich!

    Falls dein Typ Test ein Copy Ctor hat (und das hat er bei Dir), dann funktioniert dein Code.

    Simon

    Edit:
    a.) delete nicht vergessen
    b.) Warum speicherst Du Pointer in der List und nicht direkt die Werte?



  • der_Walli schrieb:

    Nehmen wir an ich habe folgende Struktur (alle Klassen aus der STL):

    typedef struct
    {
      int    a;
      string b;
    } Test;
    

    1. Ungewöhlicher Schreibstil, da struct, class, enum... bereits Typdefinitionen sind.
    2. Diese Struktur deutet auf die Verwendung von "using namespace std" im Header hin, davon kann ich nur dringends abraten [Unter der Annahme das string den std::string meint].

    In C++ ist eigentlich der folgende Stil üblich:

    struct Test
    {
      int         a;
      std::string b;
    };
    

    der_Walli schrieb:

    Kann ich jetzt, nachdem ich t.a und t.b Werte zugewiesen habe, in der Liste einen Pointer auf eine Kopie von t einfügen?

    Ja, sofern du dich auch selbst später um das delete kümmerst.

    der_Walli schrieb:

    Oder funktioniert das so nicht? Ich arbeite so gut wie nie mit structs...

    In C++ gibt es keinen unterschied zwischen struct und class, mit Ausnahme des Default-Zugriffmodifikators (private bei class, public bei struct).

    cu André



  • Ok danke.

    Die Formalitäten kann ich nicht beeinflussen. Der Code ist nicht von mir und ich soll ihn möglichst so stehen lassen und nur die Fehler beseitigen. Wenn ich dort alles auf den Standard zurückführen würde, hätte ich Jahre zu tun. Das ganze Szenario ist auch etwas komplexer als hier beschrieben.

    Und keine Angst, den delete vergesse ich schon nicht. 😉


Anmelden zum Antworten