将 'this' 包装为 unique_ptr C++

Passing 'this' wrapped as unique_ptr C++

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

代码看起来像这样:

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

但我想传递 unique_ptr 而不是原始指针。但是,指向 'this' 的指针已经被 unique_ptr 包裹在别处,所以我不想实例化另一个。可以这样做吗?

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

感谢任何帮助

如果您曾经遇到过这样一种情况,您想要传递一个保证为非空的非拥有指针(这里似乎就是这种情况),那么您可能只想使用引用。

在您的情况下,根据 doSomethingWithParent 的执行情况,您可能实际上还需要一个 const 引用:

void MyClass::doSomethingWithParent(const MyClass& parent) {
  // who knows?
}

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

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

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

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