对于赋值,我正在编写一个带有辅助函数的复制构造函数。
binarytree::binarytree(binarytree& right) {
copy(root, right.root);
}
还有我的复制功能:
void binarytree::copy(treenode*& copyRoot, const treenode* root) {
if (root != nullptr) {
//copy data
//copy left
copy(copyRoot->left, root->left);
//copy right
copy(copyRoot->right, root->right);
}
到目前为止,按预期工作以制作 BST 的副本。但是,我的赋值指定该函数将是静态的、无效的,并且有两个 treenode* 参数。是否可以使用treenode* copyRoot
作为参数而不是treenode*& copyRoot
重写此函数?
如果我按原样更改函数参数,则函数的副本不会被保存,并且在我测试时打印出一个空的 BST。
使用treenode* copyRoot作为参数而不是treenode*©Root重写此函数?
我假设binarytree::copy()
的目标是创建treenode
的新副本(copyRoot = new treenode();
行建议),所以在这种情况下......
不,你不能那样做。
通过treenode*& copyRoot
参数语句,您正在"返回"指针,而treenode* copyRoot
意味着您正在传递指向copy()
方法的指针,并且在该方法内部的结果实际上是copy()
您拥有此指针的另一个副本。
这种情况的最佳说明是void cpy(int& i)
和void cpy(int i)
方法。后一种情况不会更改传递给方法的 int。现在用int*
替换int
,这应该是对您的问题的直接解释。