提问者:小点点

对unique_ptr传递的对象成员的访问


我编写了以下代码来检查某个节点是否在BST中:

bool BST_Node :: BST_Find(unique_ptr<BST_Node> root, int key){ 
    if(!root || root->key == INT_MIN) return false;
    if(root->key == key) return true;
    else if(key < root->key) BST_Find(move(root->left), key);
    else BST_Find(move(root->right), key);
} 

根参数使用move(bst)传递,其中bst在unique_ptr中。 问题是当它试图读取根->key时:即使key存在于树中,此方法也会返回false。 我尝试使用调试器,但无法访问root。

下面是使用此方法的代码:

auto bst = make_unique<BST_Node>();
for(int i=0; i<n; i++){
    key = rand();
    if(!bst->BST_Find(move(bst), key)) {
        bst->BST_Insert(move(bst), key, "");
    }
}

共1个答案

匿名用户

试试这个

bool BST_Node :: BST_Find(unique_ptr<BST_Node> const &root, int key){ 
    if(!root || root->key == INT_MIN) return false;
    if(root->key == key) return true;
    else if(key < root->key) return BST_Find(root->left, key);
    else return BST_Find(root->right, key);
} 

BST_Find(bst, 42) // no move