DISPOSE (de-allocate heap memory)

Top  Previous  Next


DISPOSE( reference )


De-allocates heap memory previously allocated by a NEW statement.


The label of a reference variable previously used in a reference assignment with the NEW statement. This reference may be NULL and no ill effects will occur.

The DISPOSE statement de-allocates the heap memory previously allocated by a NEW statement. If DISPOSE is not called, the memory is not returned to the operating system for re-use (creating a "memory leak"). However, if you DISPOSE of a reference that is still in use (such as a QUEUE being displayed in a LIST control) you will quite likely cause a GPF that will be very difficult to track down.

DISPOSE(SELF) is a legal statement to de-allocate the current object instance. However, if used, it must be the last statement in the procedure, or any following references to the object will cause problems.

There is a way to pass a &STRING reference to a procedure in a way that it can be disposed in that procedure. Although a *STRING cannot be disposed, consider the following code:





 Ref &= S



The Parameter/result of *STRING type can be considered as a read only &STRING value: you can change the string it points to but you can't set it to reference to another string. DISPOSE sets the reference passed to it as a parameter to NULL and hence *STRING parameters and

results can't be DISPOSEd directly but assigning their reference to a reference variable gives a solution. This is also true for any other data type.


If for any reason you plan to use DISPOSE on an object in a queue that was created with NEW, to prevent a possible memeory leak you must issue the DISPOSE prior to any CLEAR (or DELETE) is executed.


In WIN 32 Clarion (e.g., Clarion 6/7) DISPOSE is used to explicitly de-allocate memory allocated by NEW statement. In Clarion .NET DISPOSE doesn’t free memory, but the destructor (DESTRUCT/Dispose method) of the corresponding class that is executed.



StringRef &STRING         !A reference to any STRING variable



Feed    PROCEDURE(short amount),VIRTUAL

Weight  LONG


AnimalRef &Animal         !A reference to any Animal CLASS



Name    STRING(30)


QueRef  &NameQ            !A reference to any QUEUE with only a STRING(30)



AnimalRef &= NEW(Animal) !Create new instance of an Animal class

DISPOSE(AnimalRef)       !De-allocate the Animal


QueRef &= NEW(NameQ)     !Create new instance of a NameQ QUEUE

DISPOSE(QueRef)          !De-allocate the queue


StringRef &= NEW(STRING(50())  !Create new STRING(50) variable

DISPOSE(StringRef)       !De-allocate the STRING(50)


See Also: