DelphiBasics
Destructor
Keyword
Defines the method used to destroy an object
 keyword Destructor(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
ClassStarts the declaration of a type of object class
ConstructorDefines the method used to create an object from a class
FunctionDefines a subroutine that returns a value
InheritedUsed to call the parent class constructor or destructor method
ObjectAllows a subroutine data type to refer to an object method
ProcedureDefines a subroutine that does not return a value
TObjectThe base class type that is ancestor to all other classes
 Download this web site as a Windows program.




 
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
 
Delphi Programming © Neil Moffatt . All rights reserved.  |  Home Page