Я пытаюсь впервые использовать unique_ptr вырастить бинарное дерево, которое в основном работает как следующее:unique_ptr становится пустым после перемещения
void growTree(unique_ptr<Node> root){
//do some calculations
root->value = "some value"
for(int i=0;i<2;i++){
unique_ptr<Node> child(new Node);
growTree(move(child));
root->children.push_back(move(child));
}
}
Однако, я обнаружил, что указатель «ребенок» становится пусто, прежде чем я верну их обратно до root->children
. Почему он утрачивает свои ценности после рекурсии? Что я здесь делаю неправильно? Спасибо!
EDIT1: Теперь я понял, что не могу использовать unique_ptr для получения ожидаемого значения после его перемещения, так как я могу это сделать (вырастить дерево) с помощью умного указателя?
Уникальная вещь уже не в одной руке, если вы переместите ее в другую сторону. Кажется, это работает по назначению. –
'growTree (move (child))' действительно оставляет ребенка пустым, так почему же он не будет пустым на следующей строке? – stijn
«unique_ptr становится пустым после переезда» - Yeees. Что еще вы ожидаете от * уникального * _ptr ?? –