Maison >développement back-end >C++ >Comment dois-je transmettre des pointeurs uniques comme paramètres de fonction en C ?
Utilisation de pointeurs uniques comme paramètres de fonction
Les pointeurs uniques offrent des capacités de gestion de la mémoire en C 11. Lors du passage d'un unique_ptr comme argument de fonction, il Il existe plusieurs approches à considérer, chacune avec des implications distinctes.
Passage par valeur (Transfert de propriété)
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
L'appel de ce constructeur nécessite de passer le pointeur par valeur, transférant effectivement sa propriété à la fonction :
Base newBase(std::move(nextBase));
Après cette opération, nextBase sera vide car la propriété de unique_ptr a été transférée.
Passage par référence de valeur L non const (Ambiguïté de propriété)
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
Cette approche nécessite une valeur L réelle (variable nommée) comme argument :
Base newBase(nextBase);
Dans ce cas, il est incertain si le la fonction revendiquera ou non la propriété du pointeur. L'implémentation de Base::Base(std::unique_ptr
Passage par référence Const L-Value (pas de transfert de propriété)
Base(std::unique_ptr<Base> const &n);
Le passage par la référence const L-value empêche la fonction de revendiquer la propriété du pointeur. La fonction peut accéder à l'objet pointé mais ne peut pas modifier sa valeur.
Passage par référence de valeur R (transfert de propriété potentiel)
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
Cette approche est similaire à en passant par une référence de valeur L non const. Il permet de passer des objets temporaires :
Base newBase(std::unique_ptr<Base>(new Base)); // Legal
Cependant, il nécessite l'utilisation de std::move lors du passage d'arguments non temporaires. La fonction peut ou non revendiquer la propriété du pointeur, ce qui rend encore une fois son comportement moins évident sans examiner l'implémentation.
Recommandations
Manipulation de pointeurs uniques
Pour manipuler des pointeurs uniques :
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!