std::unique_ptr" hat zum Beispiel Unterstützung für Arrays:
std::unique_ptr<int[]> p(new int[10]);
aber ist das notwendig? wahrscheinlich ist es bequemer, std::vector
oder std::array
zu benutzen.
Finden Sie irgendeine Verwendung für dieses Konstrukt?
Manche Leute haben nicht den Luxus, std::vector
zu benutzen, selbst mit Allokatoren. Manche Leute brauchen ein Array mit dynamischer Größe, also ist std::array
out. Und einige Leute bekommen ihre Arrays von anderem Code, von dem bekannt ist, dass er ein Array zurückgibt; und dieser Code wird nicht umgeschrieben werden, um einen "Vektor" oder so etwas zurückzugeben.
Indem man unique_ptr<T[]>
erlaubt, bedient man diese Bedürfnisse.
Kurz gesagt, man benutzt unique_ptr<T[]>
, wenn man es braucht. Wenn die Alternativen für Sie einfach nicht funktionieren. Es ist ein Mittel der letzten Wahl.
Ein std::vector
kann herumkopiert werden, während unique_ptr<int[]>
den eindeutigen Besitz des Arrays ausdrücken kann. Bei std::array
hingegen muss die Größe zur Kompilierzeit bestimmt werden, was in manchen Situationen unmöglich sein kann.
Ich habe unique_ptr<char[]>
verwendet, um einen vorab zugewiesenen Speicherpools in einem Spiel-Engine verwendet zu implementieren. Die Idee ist es, vorab zugewiesene Speicherpools anstelle von dynamischen Zuweisungen für die Rückgabe von Kollisionsabfragen und anderen Dingen wie Partikelphysik bereitzustellen, ohne dass bei jedem Frame Speicher zugewiesen / freigegeben werden muss. Es ist ziemlich praktisch für diese Art von Szenarien, in denen Sie Speicherpools benötigen, um Objekte mit begrenzter Lebensdauer (typischerweise ein, 2 oder 3 Frames) zuzuweisen, die keine Zerstörungslogik erfordern (nur Speicherfreigabe).