Wenn ich nach Wert capture und es nicht benutze bekomme ich immer noch eine Kopie?

9

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?

    
Michael Marcin 12.11.2013, 05:55
quelle

1 Antwort

3

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.

    
aaronman 12.11.2013, 06:11
quelle

Tags und Links