Heim > Backend-Entwicklung > C++ > Wie kann ich den Besitz eines „unique_ptr' ordnungsgemäß auf ein Lambda in C übertragen?

Wie kann ich den Besitz eines „unique_ptr' ordnungsgemäß auf ein Lambda in C übertragen?

Mary-Kate Olsen
Freigeben: 2024-11-21 04:55:19
Original
430 Leute haben es durchsucht

How Can I Properly Transfer Ownership of a `unique_ptr` to a Lambda in C  ?

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
    };
};
Nach dem Login kopieren

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:

  • move sollte nur eine L-Wert-Referenz akzeptieren, da das Verschieben eines R-Werts (temporäres Objekt) ein undefiniertes Verhalten ist.
  • Vermeiden Sie die Deklaration einer R-Wert-Version von verschieben, um eine versehentliche Bewegung temporärer Objekte zu verhindern.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage