【发布时间】:2013-12-10 23:08:37
【问题描述】:
问题可以概括为: 如何正确处理递归函数中的指针初始化?
我想这个问题很简单,但我仍然不知道如何解决它。
我有一个树结构定义如下:
class SplitNode{
public:
Data d;
SplitNodeParam snp;
SplitNode* left_; //will stay uninitialized
SplitNode* right_;}
我使用以下递归函数从其根部构建一棵树:
void buildTree(SplitNode* n){
findBestSplit(n);
buildTree(n->left);
buildTree(n->right); //forget that the tree growing doesnt stop
}
我获取一个节点及其数据,并根据函数对数据进行拆分。 我想将当前节点的左右子节点分配如下。
void findBestSplit(SplitNode* n){
//Do stuff with data and parameters
SplitNodeParam left_parameter(/*Some parameters*/);
*(n->left)=SplitNode(left_parameter);
SplitNodeParam right_parameter(/*Some parameters*/);
*(n->right)=SplitNode(right_parameter);
}
大问题似乎是我想将一个空指针SplitNode 分配给一个局部变量并希望稍后将其取回,这几乎是不可能的。
我在 C 中看到了一些类似的示例(使用 malloc),但我想知道如何在 C++ 中巧妙地完成此操作
提前致谢。
【问题讨论】:
-
我想你想要的东西更像
n->left = new SplitNode(left_parameter)。您现在所拥有的是将临时复制到取消引用的 nullptr 中。