Is it safe to free with super?



  • On 02/05/2018 at 12:47, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   R19 
    Platform:   Windows  ; Mac  ;  Mac OSX  ; 
    Language(s) :

    ---------
    H!

    Is it safe to do this...?

    PolygonObject* polygon = PolygonObject::Alloc( pointCount, polygonCount );
      
    // Fill polygon
      
    BaseObject* baseObject = static_cast<BaseObject *>( polygon );
      
    BaseObject::Free( baseObject );
    


  • On 02/05/2018 at 20:13, xxxxxxxx wrote:

    I think it may be the same, both ::Free calls do the exact same function (if you look at the definition).

      
    void PolygonObject::Free(PolygonObject*& bl)
    {
        C4DOS.Bl->Free(bl);
        bl = nullptr;
    }  
      
    void BaseObject::Free(BaseObject*& bl)
    {
        C4DOS.Bl->Free(bl);
        bl = nullptr;
    }
    

    and the Free function is a library function declared as:

      
    void (*Free)(C4DAtom *at);  
    


  • On 04/05/2018 at 13:55, xxxxxxxx wrote:

    Hi rsodre, i confirm that, although not representing an ordinary approach, you can safely use the parent's Free method to destroy a derived class.

    Best, Riccardo



  • On 04/05/2018 at 16:36, xxxxxxxx wrote:

    Nice, thanks!


Log in to reply