struct initialisieren?



  • Es klappt mit memset, aber wieso soll ich es nicht tun?



  • Seikilos schrieb:

    Es klappt mit memset, aber wieso soll ich es nicht tun?

    struct bumm
    {
        std::string patsch;
    };
    


  • in nem c struct?



  • Seikilos schrieb:

    in nem c struct?

    wenn du 100% sicher bist, dass da immer nur PODs drin stecken, kannst du es mit memset machen. dann könntest du aber auch gleich calloc benutzen.



  • Ja, aber wie kann ich dann den speicher in nem smart pointer verwalten?

    auto_ptr macht doch ein delete, aber da es nicht mit new erzeugt worden ist?



  • Seikilos schrieb:

    Ja, aber wie kann ich dann den speicher in nem smart pointer verwalten?

    auto_ptr macht doch ein delete, aber da es nicht mit new erzeugt worden ist?

    Wenn Du die Dinger wirklich in einem auto_ptr verwalten willst, kannst Du eine Initialisiererfunktion schreiben:

    struct SomeStrangeStruct
    {
        int intVal;
        float floatVal;
        char charArr[4];
        double* doublePtr;
    };
    
    SomeStrangeStruct* initializerFunkt()
    {
        SomeStrangeStruct* structure = new SomeStrangeStruct();
        structure->intVal = 0;
        structure->floatVal = 0.0f;
        std::fill(structure->charArr, structure->charArr + sizeof(structure->charArr), 'a');
        structure->doublePtr = NULL;
        return structure;
    }
    
    //...
    std::auto_ptr<SomeStrangeStruct> structAutoPtr(initializerFunkt());
    


  • Dies tu ich in der Tat auch, nur das die init mehr als 100 Zeilen hätte und ich dies gerne vermeiden würde. memset kommt mir da schon zu gute.

    Ich wollte nur sichergehen, dass ich es richtig verstanden habe, dass calloc und smart ptr keine freunde wären 🙂



  • Seikilos schrieb:

    Dies tu ich in der Tat auch, nur das die init mehr als 100 Zeilen hätte und ich dies gerne vermeiden würde. memset kommt mir da schon zu gute.

    Ich wollte nur sichergehen, dass ich es richtig verstanden habe, dass calloc und smart ptr keine freunde wären 🙂

    Ne, sind sie nicht. c|malloc + delete ist einem ziemlich schlechte Kombination. Die harmonieren irgendwie nicht. 😉



  • Seikilos schrieb:

    Ich wollte nur sichergehen, dass ich es richtig verstanden habe, dass calloc und smart ptr keine freunde wären 🙂

    Wenn ich mich noch richtig erinnere, so hat die Loki-Bibliothek aber durchaus Smartpointer die man für die alloc-Geschichten "konfigurieren" kann (Bereich Delete policies, Loki::DeleteUsingFree< P >).

    Wobei ich die Loki-Bibliothek zumindestens von ihrer Verständlichkeit nicht wirklich gut finde (Ich finde auch das Buch "Modern C++ Design" als zu knapp von den Ausführungen her, und imho hätten auch noch Beispiele aus der Realität gut getan; Zumindestens wäre es dann leichter "verdaulich").

    cu André



  • asc schrieb:

    Seikilos schrieb:

    Ich wollte nur sichergehen, dass ich es richtig verstanden habe, dass calloc und smart ptr keine freunde wären 🙂

    Wenn ich mich noch richtig erinnere, so hat die Loki-Bibliothek aber durchaus Smartpointer die man für die alloc-Geschichten "konfigurieren" kann (Bereich Delete policies, Loki::DeleteUsingFree< P >).

    Wobei ich die Loki-Bibliothek zumindestens von ihrer Verständlichkeit nicht wirklich gut finde (Ich finde auch das Buch "Modern C++ Design" als zu knapp von den Ausführungen her, und imho hätten auch noch Beispiele aus der Realität gut getan; Zumindestens wäre es dann leichter "verdaulich").

    cu André

    Du erinnerst dich richtig. Im Rahmen der Storage Policy kann man durchaus auch ein free() einbauen.
    Was Verständlichkeit etc. angeht kann ich dir aber nicht zustimmen. Es ist zwar Anfangs etwas schwierig die Konzepte zu verinnerlichen die im "täglichen Gebrauch" nicht so häufig vorkommen, aber wenn man das hat ist die Bibliothek nicht komplizierter als andere auch, und das Buch hat durchaus Beispiele, konzentriert sich allerdings auf die Facts statt sich in einen rundum-Sorglos Paket für die Anwendungsbeispiele zu verzetteln...


Anmelden zum Antworten