Maison  >  Article  >  développement back-end  >  Comment puis-je transférer correctement la propriété d'un « unique_ptr » vers un Lambda en C ?

Comment puis-je transférer correctement la propriété d'un « unique_ptr » vers un Lambda en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-21 04:55:19346parcourir

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

Préserver la propriété dans un Lambda avec un pointeur unique

En C , un unique_ptr est conçu pour gérer exclusivement la propriété d'un seul objet. Lorsque vous tentez de capturer un unique_ptr dans une expression lambda, la propriété peut devenir ambiguë. Voici comment résoudre ce problème :

Initialement, une tentative de capture d'un unique_ptr comme référence dans un lambda peut échouer à la compilation. Pour transférer explicitement la propriété au lambda, C 14 a introduit la capture généralisée lambda :

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
    };
};

Transfert de propriété avec implémentations de copie et de déplacement :

Dans votre code mis à jour, vous J'ai défini des fonctions de copie et de déplacement pour gérer différents types de références. Pour garantir un transfert de propriété approprié, tenez compte des points suivants :

  • move ne doit accepter qu'une référence lvalue, car le déplacement d'une rvalue (objet temporaire) est un comportement non défini.
  • Évitez de déclarer une version rvalue de déplacer pour éviter tout mouvement accidentel d'objets temporaires.

Avec ces modifications, votre code devrait fonctionner comme prévu, préservant la propriété au sein du lambda expression.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn