传递包装为 unique_ptr C++ 的“this”

m.t*_*cey 0 c++ recursion unique-ptr

我有一个类充当二叉树中的节点,我想从该类内部调用的方法之一是递归的,并且需要将自身传递给树中的下一个节点,以便下一个节点知道它的自己的父母。我不想存储类成员父级,因为我想避免使用 shared_ptr。

代码如下所示:

void MyClass::expand(MyClass* parent){
    for (int i = 0; i < children.size; i ++){
        children[i]->doSomethingWithParent(parent);
        children[i]->expand(this);
    }
    return;
}
Run Code Online (Sandbox Code Playgroud)

但我想传递一个 unique_ptr 而不是原始指针。但是,指向“this”的指针已经被 unique_ptr 包裹在其他地方,所以我不想实例化另一个。是否有可能做到这一点?

如果有任何我应该知道的设计模式,请告诉我。

任何帮助表示赞赏

Fan*_*Fox 5

根本不要使用指针。您没有获得所有权,该参数不是可选的,因此请使用参考:

void MyClass::expand(MyClass& parent){
    for (int i = 0; i < children.size; i ++){
        children[i]->doSomethingWithParent(parent);
        children[i]->expand(*this);
    }
    return;
}
Run Code Online (Sandbox Code Playgroud)

您的所有代码都将执行相同的操作,并且更安全等。