Ich möchte ein shared_ptr nach Wert in einem Lambda erfassen, um sicherzustellen, dass die Lebensdauer des Objekts bis zu dem Punkt reicht, an dem die Lambda-Funktion aufgerufen wird.
Ich brauche das shared_ptr sonst nicht. Wenn ich das tue:
%Vor%Wird sp automatisch kopiert, obwohl der Körper nicht darauf verweist?
Ich würde sagen, dass es wegen dieses Zitats garantiert ist.
5.1.2
21 Wenn der Lambda-Ausdruck ausgewertet wird, werden die Entitäten, die durch kopiert werden, zur direkten Initialisierung jedes entsprechenden nicht statischen Datenelements des resultierenden Abschlussobjekts verwendet . (Bei Array-Elementen werden die Array-Elemente direkt in aufsteigender tiefgestellter Reihenfolge initialisiert.) Diese Initialisierungen werden in der (nicht angegebenen) Reihenfolge ausgeführt, in der die nicht statischen Datenelemente deklariert werden. [Hinweis: Dies stellt sicher, dass die Zerstörungen in der umgekehrten Reihenfolge der Konstruktionen auftreten. - Endnote]
BEARBEITEN: Beim zweiten Gedanken, da das Objekt direkt initialisiert wird, kommt Kopier-Elision nicht ins Spiel.
Wegen der Kriterien für die Kopier-Eliminierung in § 12.8
, zu lange um zu posten, ich don Ich glaube nicht, dass die Kopie gelöscht werden kann
Beachten Sie jedoch, dass std::shared_ptr
für die meisten Zwecke nicht sicher ist.