我有一個表示運行時上下文並構建樹的類,樹根保存在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);
}
};
所以我用std::move()
提取從Context
實例的根節點。
但也有替代品使用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