J'ai une classe qui représente un contexte d'exécution et construit un arbre, la racine de l'arbre est maintenu dans une unique_ptr
. Lorsque la construction de l'arbre est terminée, je veux extraire l'arbre. Voici comment il semble (pas runnable, ce n'est pas une question de débogage):std :: unique_ptr :: release() vs std :: move()
class Context {
private:
std::unique_ptr<Node> root{new Node{}};
public:
// imagine a constructor, attributes and methods to build a tree
std::unique_ptr<Node> extractTree() {
return std::move(this->root);
}
};
J'utilisé std::move()
pour extraire le nœud racine de l'instance Context
.
Cependant, il existe des alternatives à l'utilisation std::move()
.: par exemple
std::unique_ptr<Node> extractTree() {
// This seems less intuitive to me
return std::unique_ptr<Node>{this->root.release()};
}
est-std::move()
le meilleur choix?
Vous devez appeler '' reset' de this-> root' après son déplacement. Tu ferais mieux de lire cette réponse aussi http://stackoverflow.com/a/20850223/555515 – neuront
@neuront: Non, non. –
après avoir déplacé le src contient nullptr, la réinitialisation est inutile! – paulm