Einfache Zuweisung von boost::shared_ptr
-
Hi!
Ich hantiere noch nicht so lange mit shared_ptr von boost herum und eine Sachen erscheint mir doch recht umständlich, vielleicht weiß da jemand Abhilfe.
Da eine Zeile Code mehr sagt als 1000 Worte:T functionCall( ... ) { ... } boost::shared_ptr<T> p; p = boost::shared_ptr<T>( new T( functionCall( ... ) ) );Kann man die lange Zeile irgendwie vereinfachen? Als dreckigen Workaround hab ich kurz folgendes gehabt, war mir dann aber doch zu dreckig :D:
template<class T> void operator+= ( boost::shared_ptr<T>& t, const T& elem ) { t = boost::shared_ptr<T>( new T( elem ) ); } :arrow_right: p += functionCall( ... );PS: Kann man eigentlich Zeilennummern für den Code anschalten? Ich meine ich hätte das schon gesehen, aber auch bei den [.code]-Tags gibt's keine Zeilennummern (jedenfalls in der Vorschau).
-
Für sowas hat shared_ptr die Funktion reset.
p.reset( new T( functionCall( ... ) ) );Die zeilennummern kommen erst ab einer bestimmten Länge.
-
Braunstein schrieb:
Für sowas hat shared_ptr die Funktion reset.
p.reset( new T( functionCall( ... ) ) );Hm, Mist. Finde ich unbefriedigend, ich finde ein Gleichheitszeichen doch ungleich ausdrucksstärker
Aber danke trotzdem!Braunstein schrieb:
Die zeilennummern kommen erst ab einer bestimmten Länge.
Oh, ok.
-
Badestrand schrieb:
boost::shared_ptr<T> p; p = boost::shared_ptr<T>( new T( functionCall( ... ) ) );Kann man auch vereinfachen zu
boost::shared_ptr<T> p( new T( functionCall( ... ) ) );Variablen gleich zu initialisieren wenn man sie deklariert wird sowieso meist als besserer Stil angesehn.
-
Achso, klar, aber die Variable sitzt in einer Klasse und wird nicht bei der Konstruktion belegt, deshalb hatte ich das so differenziert hingeschrieben

-
pumuckl! Ja ja, immer diese optimalen Fälle als Lösung.
Badestrand! Ja, es sieht nicht schön aus und außer Reset gibts erstmal nichts kürzeres.