Operator Delete

FreeBASIC

Operator Delete
 
Operator to delete data allocated with the New operator

Syntax

Declare Operator Delete ( buf As Any Ptr )
Declare Operator delete[] ( buf As Any Ptr )

Usage

Delete buf
or
Delete[] buf

Parameters

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).

Description

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.

Example

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
Next

' Free the entire integer array.
Delete[] p

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

Dialect Differences

  • Only available in the -lang fb dialect.

Differences from QB

  • New to FreeBASIC

See also