Operator Delete

Operator to delete data allocated with the New operator

declare operator delete ( buf as any ptr )
declare operator delete[] ( buf as any ptr )

Delete buf
Delete[] buf

A pointer to memory that has been allocated by New or New[] (a typed pointer must be provided in accordance to the data type to delete).

Delete is used to destroy and free the memory of an object created with New. When deleting a TYPE, its destructor will be called. Delete should only be used with addresses returned from New.

The array version of Delete, Delete[], is used to destroy an array of objects previously created with New[]. Destructors will be called here as well.

Delete must be used with addresses returned from New, and Delete[] with New[]. You cannot mix and match the different versions of the operators.

After the memory is deleted, the buf pointer will be pointing at invalid memory. Calling Delete twice on the same pointer value leads to undefined behaviour. It may be a good idea to set the buf pointer to null (0), in order to guard against later code using it accidentally, since null pointer dereferences are easier to find and debug.

Calling Delete on a null pointer induces no action.

This operator can be overloaded for user-defined types as a member Operator.

Note: Any operator Delete[] (or the only overload operator Delete) is not compatible with polymorphism, even using Override Virtual Destructor that may in addition induce crashing.
Instead of having to call such an operator Delete([]) on derived-type pointer, the safest way is to simply call (on base-type pointer) an overridden user Virtual member procedure that will automatically launch the operator Delete([]) at derived-type level.

Type Rational
    As Integer numerator, denominator
End Type

' Create and initialize a Rational, and store its address.
Dim p As Rational Ptr = New Rational(3, 4)

Print p->numerator & "/" & p->denominator

' Destroy the rational and give its memory back to the system.
Delete p

' Set the pointer to null to guard against future accesses
p = 0

' Allocate memory for 100 integers, store the address of the first one.
Dim p As Integer Ptr = New Integer[100]

' Assign some values to the integers in the array.
For i As Integer = 0 To 99
    p[i] = i

' Free the entire integer array.
Delete[] p

' Set the pointer to null to guard against future accesses
p = 0

Dialect Differences:
Differences from QB:
See also:
Back to Memory Operators
Back to Operators
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki

sf.net phatcode