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
WriteLn('2nd word =
'+words.GetWord[2]);
end;
end.
|
|
2nd word = Word 2
|
|