传递“这个”作为UnQuyJPPTC++
我有一个在二叉树中充当节点的类,我想从该类内部调用的方法之一是递归的,需要将自身传递到树中的下一个节点,以便下一个节点知道自己的父节点。我不想存储类成员父级,因为我想避免使用共享\u ptr 代码如下所示:传递“这个”作为UnQuyJPPTC++,c++,recursion,unique-ptr,C++,Recursion,Unique Ptr,我有一个在二叉树中充当节点的类,我想从该类内部调用的方法之一是递归的,需要将自身传递到树中的下一个节点,以便下一个节点知道自己的父节点。我不想存储类成员父级,因为我想避免使用共享\u ptr 代码如下所示: void MyClass::expand(MyClass* parent){ for (int i = 0; i < children.size; i ++){ children[i]->doSomethingWithParent(parent);
void MyClass::expand(MyClass* parent){
for (int i = 0; i < children.size; i ++){
children[i]->doSomethingWithParent(parent);
children[i]->expand(this);
}
return;
}
但我希望传递一个唯一的\u ptr,而不是原始指针。但是,指向“this”的指针已经被一个惟一的ptr包装在别处,所以我不想实例化另一个。有可能这样做吗 如果有任何设计模式,我应该知道,请让我知道
任何帮助都值得欣赏如果您曾经遇到过这样的情况,即您希望传递一个保证为非空的非拥有指针(这里就是这种情况),那么您可能只想使用一个引用 在您的情况下,根据doSomethingWithParent执行的操作,您可能实际上还需要一个常量引用:
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;
}
您的所有代码都将执行相同的操作,而且更安全等等。这不是一个好的设计。使用共享的\u ptr并从\u this启用\u共享的\u作为MyClass的基类。我想传递唯一的\u ptr而不是原始指针为什么?这不像expand获得传递指针的所有权。原始指针不是邪恶的。需要避免的是表示所有权的原始指针。子类是MyClass的成员吗?如果是这样,孩子们永远不能拥有或分享这个。使用unique_ptr是在要求灾难发生。您已将对象的所有权移交给该包装器。仅使用智能指针管理对象的生存期/删除。除非万不得已,否则不要把它们传给别人。传递原始指针。参数不是可选的。根目录没有父目录,所以指针是合法的。