Destroy

 (Available in 01 TS COM - TS_COM_InterfaceSafe)

Purpose

CALLBACK: It is adviced to use 'oObject:Axit()'

Syntax

// See the documentation for the 'Axit' method.
oSomeClass:Axit( ) 

Description

This is where the application releases all refered to dynamicly allocated resources ( ARRAY, OBJECT, STRING ), and where all staticaly allocated memory is freed.

Note: Do not execute the 'Destroy()' method directly, it is adviced to call the 'Axit()' method when destruction of the object is needed this method of destruction is optimized for speed and guaranties that the 'Destroy()' method is only called once.

Note: The designer of the class should be aware of the fact that the 'Destroy()' method can be called multiple times.

Example

METHOD Destroy( ) CLASS SomeClass
// Let it be known that we are destroying the object
   SELF:IsInDestroy:=TRUE 
// Do the destructive work
   ... 
// All work should be done before calling SUPER
   SUPER:Destroy( ) 
RETURN NIL

Source

METHOD Destroy( ) CLASS TS_InterfaceSafe
LOCAL oCOMGlobalData AS _TS_COMGlobalData
LOCAL oAIUnknown AS TS_AbstractIUnknown
   TSTrace Enter
   oCOMGlobalData:=_TS_ModuleGetCOMGlobalData( )
   SELF:_ObjectStat1:=_OR( SELF:_ObjectStat1 ; ...
  ... , TS_OBJSTAT1_INDESTROY )
   oAIUnknown:=SELF:_AIUnknown
   SELF:_AIUnknown:=NULL_OBJECT
   IF oAIUnknown<>NULL_OBJECT
      #IFDEF TS_TRACETIMED_ENABLE
         _TS_TraceTimedEnter( TS_TT_SYM_EXTERNAL, TS_TT_SYM_IUNKNOWN, #Release )
      #ENDIF
      oAIUnknown:Release( )
      #IFDEF TS_TRACETIMED_ENABLE
         _TS_TraceTimedLeave( TS_TT_SYM_EXTERNAL, TS_TT_SYM_IUNKNOWN, #Release )
      #ENDIF
      oAIUnknown:=NULL_OBJECT
   END
   SUPER:Destroy( )
   #IFDEF TS_COMGLOBALDATA_CRITICALSECTION
      EnterCriticalSection( oCOMGlobalData:_COMGGeneralPurposeSection )
   #ENDIF
   IF SELF:_InterfaceSafeCounted
      SELF:_InterfaceSafeCounted:=FALSE
      InterlockedDecrement( oCOMGlobalData:_ObjectsWithRegisterAxitCount  ; ...
     ... )
      IF LONGINT( oCOMGlobalData:_ObjectsWithRegisterAxitCount )<0L
         TSTrace Warning "LONGINT(oCOMGlobalData:_ObjectsWithRegisterAxitCount)<0L"
      END
   END
   #IFDEF TS_COMGLOBALDATA_CRITICALSECTION
      LeaveCriticalSection( oCOMGlobalData:_COMGGeneralPurposeSection )
   #ENDIF
   TSTrace Leave DESTROY
RETURN NIL