shared pointer visual studio



  • babmo schrieb:

    Ok danke euch. Ich würde gerne einen std::vector dynamisch alloziieren über shared ptr damit dieser vector sich selbst wieder freigibt.

    wieso? was willst du damit erreichen?



  • std::shared_ptr<std::vector<int>> a(new std::vector<int>(4));
    a->insert(a->begin(), 8);
    

    Aber ein vector auf dem heap ist vermutlich dummes Zeug



  • babmo schrieb:

    Ok danke euch. Ich würde gerne einen std::vector dynamisch alloziieren über shared ptr damit dieser vector sich selbst wieder freigibt. allerdings scheitere ich am zugriff und bräuchte kleine Hilfe.

    Ich frage mich z.B. wie ich elemente in den vector fülle?

    Du meinst das hier?

    std::vector<int> a(4);
    a.insert(a.begin(), 8);
    


  • hmm, aber da ist ja dann kein shared pointer drin, also wenn ich einen std::vector als shared pointer alloziiere. oder macht man das nicht sondern immer nur die objekte des vectors?



  • Ein vector ist GENAU das gleiche wie ein Array. Wenn er auf dem Stack allokiert wird, kannst du einen Stackoverflow bekommen.

    shared_ptr ist IMMER der Smartpointer der Wahl, deshalb ist dein Code genau richtig.

    Nur dass man statt

    a->insert(a->begin(), 8);
    

    lieber

    (*a.get()).insert((*a.get).begin(), 8);
    

    schreibt, weil die Dereferenzierung von einem Zeiger schneller ist als von einem Smartpointer.

    Üblich ist da ein Makro:

    #define a (((****(((a))).get()))))))
    a.insert(a.begin(), 8);
    


  • tatsache schrieb:

    Ein vector ist GENAU das gleiche wie ein Array. Wenn er auf dem Stack allokiert wird, kannst du einen Stackoverflow bekommen.

    Schwachsinn



  • babmo schrieb:

    hmm, aber da ist ja dann kein shared pointer drin, also wenn ich einen std::vector als shared pointer alloziiere. oder macht man das nicht sondern immer nur die objekte des vectors?

    Warum willst du eine shared pointer verwenden?



  • tatsache schrieb:

    Ein vector ist GENAU das gleiche wie ein Array. Wenn er auf dem Stack allokiert wird, kannst du einen Stackoverflow bekommen.

    shared_ptr ist IMMER der Smartpointer der Wahl, deshalb ist dein Code genau richtig.

    Nur dass man statt

    a->insert(a->begin(), 8);
    

    lieber

    (*a.get()).insert((*a.get).begin(), 8);
    

    schreibt, weil die Dereferenzierung von einem Zeiger schneller ist als von einem Smartpointer.

    Üblich ist da ein Makro:

    #define a (((****(((a))).get()))))))
    a.insert(a.begin(), 8);
    

    Dasen Trollpost?! hu



  • tatsache schrieb:

    Ein vector ist GENAU das gleiche wie ein Array. Wenn er auf dem Stack allokiert wird, kannst du einen Stackoverflow bekommen.

    Der "Content" eines vectors liegt auf dem Heap, da kann es zu keinem Stackoverflow kommen.

    Das einzige was auf dem Stack liegt ist der Pointer und vielleicht noch ein paar Variablen zur Administration.



  • @Skym0sh0
    Ja.
    Obvious Troll is obvious.


Anmelden zum Antworten