что бы переместить одно бинарное дерево в другое?
Вот что я набросал .
Tree& operator=(Tree*& tree)
{
if(tree == nullptr)
return &tree;
this->leftChild = tree->leftChild;
this->rightChild = tree-rightChild;
return tree;
}
1) Я подумал что рекурсивно вызываю operator= по левому узлу и по правому узлу - своеобразный обход.
2) В условном операторе проверяю - если у меня встречается ноль то возвращаю этот узел
Правильное выполнение ?
Переместить? Тогда и надо писать оператор перемещения. Концептуально так должно выглядеть: Tree& operator=(Tree&& other) { if (&other == this) return *this; Clear(); m_root = other.m_root; other.m_root = nullptr; return *this; }
а я думал так. Ведь передаю в оператор указатель, а чтобы не копировать передаю ссылку на указатель. BinaryTree& BinaryTree::operator=(BinaryTree*& tree) { if(this == tree) return *this; if(tree == nullptr) return *this; this->leftChildNode = tree->leftChildNode; tree->leftChildNode = nullptr; // важно не забыть this->rightChildNode = tree->rightChildNode; this->rightChildNode = nullptr // важно не забыть tree = nullptr; return *this; }
Это что-то вообще не соответствующее семантике оператора перемещения И как минимум в операторы перемещения/копирования прилетают rvalue/lvalue ссылки на объекты, а не указатели
Ссылка на указатель это экономия на спичках
А какая там экономия то? Там её вовсе нет А конструкция страшная
implementation defined экономия
Обсуждают сегодня