Я пытаюсь реализовать дерево B +. Это очень маленькая часть реального кода. У меня были некоторые проблемы при передаче указателя объекта на функцию. Насколько я знаю, эти объекты, созданные внутри функции, впоследствии уничтожаются. Так что было бы хорошим способом улучшить это без изменения семантики и при этом сохранить рекурсивную функцию. Любая обратная связь будет оценена.
void percolate_up(IndexNode* Current, int btree_order, IndexNode* Right, IndexNode* Root)
{
if(Current->Parent == NULL)
{
IndexNode* UpperNode = new IndexNode;
UpperNode->AddChild(Current);
UpperNode->AddChild(Right);
Current->Parent = UpperNode;
Right->Parent = UpperNode; //This is defined inside an if statement
// in main yet this statement doesn't affect it
UpperNode->AddKey(Current->Keys[btree_order]);
Root = UpperNode;
}
else if(.......){
...
...
percolate_up(....);
}
}
int main(){
...
if(...){
IndexNode* RightNode = new IndexNode;
percolate_up(Current, btree_order, RightNode, Root);
//RightNode->Parent is still NULL here but Current->Parent is changed
//Also Root is unchanged, Why does this happen?
}
Все объекты, созданные с помощью «new», будут существовать после возврата функции. Так что вы должны использовать это.
Других решений пока нет …