Wenn ich diese verwenden, um einen binären Baum für =
Operator wie folgtC++ einen binären Baum
BTNode<ElemType>* BinaryTree<ElemType>::_Copy(BTNode<ElemType>* T){
if (T == NULL){
return NULL;
}
BTNode<ElemType> *p;
p = new BTNode<ElemType>;
p->data = T->data;
p->lchild = _Copy(T->lchild);
p->rchild = _Copy(T->rchild);
return p;
}
und stellen Überlastfunktion zu kopieren:
BinaryTree& operator=(const BinaryTree &rhs){
if (&rhs == this){
return *this;
}
_Destroy (m_root);
m_root = _Copy (rhs.m_root);
return *this;
}
dann, wenn ich zwei treetype Element tree_1
und tree_2
.
Als ich
tree_2 = tree_1;
kopiere ich alle das Element tree_1
-tree_2
. Und zu diesem Zeitpunkt füge ich einen neuen Knoten tree_2
hinzu. Die tree_1
wird ebenfalls geändert. Wie kann ich eine neue rekursive Kopierfunktion einstellen, die tree_1
gleich bleibt und nur die Struktur von tree_2
ändert?
Warum definieren Sie eine _Copy-Funktion, anstatt einen Kopierkonstruktor zu definieren? Wenn Sie einen Zuweisungsoperator definieren, sollten Sie im Allgemeinen auch einen Kopierkonstruktor definieren. Wenn Sie Semantik für tiefe Kopien/Zuweisungen definieren müssen, sollten Sie dies auch für jeden beteiligten Typ tun. Außerdem ist dieser Code voller Speicherlecks. –