[英]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.