type Class declaration
...
Destructor Destroy; Override;
...
end;
Description
The Destructor keyword defines a destructor procedure Destroy for a class.
When freeing an object, the Destructor is called. This allows the object to free any storage or other volatile resources it has acquired.
The Name for the destructor is normally destroy, but is not restricted to this. It is very wise to keep to this name.
The Override directive must be specified since we are overriding the virtual TObject destroy method.
Notes
At the end of a destructor, you should call Inherited to invoke the parent destructor.
Related commands
Class Starts the declaration of a type of object class
Constructor Defines the method used to create an object from a class
Function Defines a subroutine that returns a value
Inherited Used to call the parent class constructor or destructor method
Object Allows a subroutine data type to refer to an object method
Procedure Defines a subroutine that does not return a value
TObject The base class type that is ancestor to all other classes
Example code : Example of a destructor used to free up acquired memory
// Full Unit code.
// -----------------------------------------------------------
// You must store this code in a unit called Unit1 with a form
// called Form1 that has an OnCreate event called FormCreate.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
// String holder record
TString = string[10];
// Define a container class
TWords = class
private
wordCount : Integer;
wordsStart : Pointer;
function Get(Index: Integer): string;
public
property GetWord[Index : Integer] : string read Get;
published
constructor Create(count : integer);
Destructor Destroy; override;
end;
// The form class itself
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// TWords constructor - build the word array
constructor TWords.Create(count: integer);
var
i : Integer;
wordsList : ^TString;
begin
// Get storage for 'count' strings
GetMem(wordsStart, count*SizeOf(TString));
// Fill out this list
wordsList := wordsStart;
wordCount := count;
for i := 1 to count do
begin
wordsList^ := 'Word '+IntToStr(i);
Inc(wordsList);
end;
end;
// TWords destructor - release storage
destructor TWords.Destroy;
begin
// Release memory, if obtained
if wordsStart <> nil
then FreeMem(wordsStart);
// Always call the parent destructor after running your own code
inherited;
end;
// GetWord property read function
function TWords.Get(Index: Integer): string;
var
wordsList : ^TString;
begin
// Read the word at the given index, if in range
if (Index >= 1) and (Index <= wordCount)
then
begin
wordsList := wordsStart;
Inc(wordsList, Index-1);
Result := wordsList^;
end;
end;
// Main line code
procedure TForm1.FormCreate(Sender: TObject);
var
words : TWords;
begin
// Create a TWords object
words := TWords.Create(4);
// Now show the 2nd word in this object
ShowMessage('2nd word = '+words.GetWord[2]);
end;
end.
2nd word = Word 2