Search code examples
c++destructoroctree

Invoking delete on an octree array


So I wrote an octree struct, as follows:

struct octree{
    static const int maxdepth=8;
    octree* child[8];
    uint32_t rgb;//candidates for the extra 8 bits: alpha, lighting, shape(to reduce size)
    uint8_t shape;
    ~octree(){delete[] child;}
};

The concern that I have is with the destructor...
Will it call the destructors of the children or do I have to do that myself?


Solution

  • What you have declared is an array of 8 octree* values. You cannot delete the array itself.

    You should instead do this:

    for( int i = 0; i < 8; i++ )
        if( child[i] ) delete child[i];
    

    If you want to delete them all in one hit, you could define it like this:

    octree * child;
    
    //...
    child = new octree [8];
    
    //...
    delete [] child;
    

    The reason being that in an octree you either have no children or 8 children.

    And yes: when you delete an octree instance, its destructor will be called.