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!