Unique Pointer aus Funktionsrückgabe
-
Eine Funktion liefert mir einen Zeiger auf ein Objekt zurück. Ich würde diesen gerne in einem unique_ptr kapseln.
Wie macht man das?Nichtkompilierbares Beispiel zur Verdeutlichung:
T* getT() { return new T; } main() { std::unique_ptr<T> my_pointer = ??? getT(); }
-
- Du kannst auch direkt einen unique_ptr zurückgeben.
- Wenn nicht :
std::unique_ptr<T> my_pointer{ getT() };
-
Danke soweit. Die ursprünglichen Methoden stammen nicht von mir und dürfen/können von mir nicht modofiziert werden.
Das zweite Beispiel funktioniert für viele Fälle, allerdings habe ich noch einen Spezialfall:
Ein Pointer wird an mehreren Stellen verwendet und ihm auch des Öfteren ein neuer Wert zugewiesen:T* original_ptr; if() original_ptr = doThis(); else() original_ptr = doThat(); delete original_ptr; original_ptr = getT(); ...
Ich befürchte, dass der Konstruktoransatz da scheitern wird.
-
@ravenheart_ggg
Nimm ein Lambda...void f() { auto init_ptr = []() -> T* { if( cond1 ) return doThis; else if( cond2 ) return doThat(); else return getT(); }; unique_ptr<T> ptr { init_ptr() }; }
-
-
Vergesst nicht die std::unique_ptr::reset function, damit sollte das deutlich einfacher gehen als das mit Lambdas zu lösen.
-
@ravenheart_ggg sagte in Unique Pointer aus Funktionsrückgabe:
Die ursprünglichen Methoden stammen nicht von mir und dürfen/können von mir nicht modofiziert werden.
Du kannst aber Wrapper schreiben.