std::shared_ptr frage



  • In meinem Programm alloziiere ich etwas auf dem Heap und möchte den Pointer darauf später zu einem shared_ptr machen, sodass automatisch ein delete bei verlassen des Gültigkeitsbereiches augerufen wird.

    Sowas:

    struct my_obj;
    my_obj obj = new my_obj();
    obj->myMethod();
    
    [...]
    
    std::shared_ptr<my_obj> obj_ptr(obj);
    return obj_ptr;
    

    Geht das? Finde mich in der Dokumentation irgendwie nicht so zurecht ...



  • Wenn du noch nen * in Zeile 2 spendierst, geht das schon. Es ist aber sinnvoller, gleich

    std::shared_ptr<my_obj> obj = std::make_shared<my_obj>();
    obj->myMethod();
    return obj;
    

    zu schreiben, dann bist du automatisch alle Exceptionsicherheitsprobleme los, die im Zusammenhang mit diesem Objekt entstehen können (sonst müsstest du dich explizit darum kümmern, wenn myMethod eine Exception wirft).



  • ptrask schrieb:

    In meinem Programm alloziiere ich etwas auf dem Heap und möchte den Pointer darauf später zu einem shared_ptr machen, sodass automatisch ein delete bei verlassen des Gültigkeitsbereiches augerufen wird.

    Willste nur das und brauchst den Pointer nicht zu kopieren, nimm std::unique_ptr.


Log in to reply