繁体   English   中英

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

[英]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 包裹在其他地方,所以我不想实例化另一个。 是否有可能做到这一点?

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

任何帮助表示赞赏

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

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

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

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

在您的情况下,根据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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM