ランタイムコンテキストを表し、ツリーを構築するクラスがあります。ツリールートはunique_ptr
に保持されています。ツリーを構築するときにツリーを抽出したい。これは、それがどのように見えるかです(実行可能ではない、これはデバッグの問題ではありません):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);
}
};
は、だから私はContext
インスタンスからルートノードを抽出するためにstd::move()
を使用しました。
は、しかし、例えばstd::move()
を使用する選択肢があります:
std::unique_ptr<Node> extractTree() {
// This seems less intuitive to me
return std::unique_ptr<Node>{this->root.release()};
}
はstd::move()
最良の選択ですか?
移動後、 'this-> root'から' reset'を呼び出す必要があります。あなたもこの答えを読むのがよいでしょう。http://stackoverflow.com/a/20850223/555515 – neuront
@neuront:そうではありません。 –
srcを移動した後にnullptrが含まれています。リセットは無意味です! – paulm