Bewahrung des Besitzes in einem Lambda mit einem eindeutigen Zeiger
In C ist ein unique_ptr so konzipiert, dass er ausschließlich den Besitz eines einzelnen Objekts verwaltet. Beim Versuch, einen unique_ptr in einem Lambda-Ausdruck zu erfassen, kann der Besitz unklar werden. So beheben Sie dieses Problem:
Zunächst schlägt die Kompilierung möglicherweise fehl, wenn versucht wird, einen unique_ptr als Referenz in einem Lambda zu erfassen. Um den Besitz explizit auf das Lambda zu übertragen, hat C 14 die generalisierte Lambda-Erfassung eingeführt:
auto getAction = [](std::unique_ptr<MyClass> psomething) { // Ownership now belongs to the lambda return [a = std::move(psomething)]() { a->do_something(); // psomething is released after this point }; };
Eigentumsübertragung mit Implementierungen zum Kopieren und Verschieben:
In Ihrem aktualisierten Code haben Sie Ich habe Kopier- und Verschiebefunktionen definiert, um verschiedene Arten von Referenzen zu verarbeiten. Um eine ordnungsgemäße Eigentumsübertragung sicherzustellen, beachten Sie Folgendes:
Mit diesen Änderungen sollte Ihr Code wie erwartet funktionieren und den Besitz innerhalb des Lambda-Ausdrucks beibehalten.
Das obige ist der detaillierte Inhalt vonWie kann ich den Besitz eines „unique_ptr' ordnungsgemäß auf ein Lambda in C übertragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!