-2

I am trying to implement a B+ tree. This is a very small portion of the actual code. I had some problems when passing an object pointer to a function. As far as I know, those objects created inside the function are destroyed afterwards. So what would be a good way to improve this without changing the semantics and still keep the function recursive. Any feedback would be appreciated.

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?
    }
Pure
  • 85
  • 1
  • 8

1 Answers1

1

All objects created with "new" will exists after function return. So you should use it.

VladimirS
  • 600
  • 6
  • 14