コンストラクタは、オブジェクトの生成と初期化を行うメソッドです。コンストラクタは、キーワード constructor を用いメソッド名を Create にします。この Create という名前は Delphi における慣習のようです。
一方、デストラクタはキーワード desutructor を用い、そのメソッド名を Destroy にしてやります。デストラクタの役割は生成されたオブジェクトを破棄します。
それでは早速例を見てみましょう。Button と RadioGroup が貼り付けてあります。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
RadioGroup1: TRadioGroup;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
TBookShelf = class(TObject)
private
FBookArray: array[0..3] of string;
public
constructor Create; // コンストラクタ
destructor Destroy; override; // デストラクタ
procedure ShowBook(i: Integer);
end;
var
Form1: TForm1;
BookShelf: TBookShelf;
implementation
{$R *.dfm}
constructor TBookShelf.Create;
begin
// 初期化
FBookArray[0] := 'Delphi6';
FBookArray[1] := 'Borland';
FBookArray[2] := 'Windows';
end;
destructor TBookShelf.Destroy;
begin
inherited;
end;
procedure TBookShelf.ShowBook(i: Integer);
begin
ShowMessage('タイトルは ' + FBookArray[i] + ' です。');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin // (* ブレークポイント *)
// オブジェクト生成
BookShelf := TBookShelf.Create;
RadioGroup1.Items.Add('Delphi6');
RadioGroup1.Items.Add('Borland');
RadioGroup1.Items.Add('Windows');
RadioGroup1.ItemIndex := 0;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BookShelf.Free; // 破棄(デストラクタの呼び出し)
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// ShowBook の呼び出し
BookShelf.ShowBook(RadioGroup1.ItemIndex);
end;
end.
コンストラクタで、FBookArray を初期化している点に注目してください。BookShlef := TBookShelf.Create; を実行すると、TBookShelf のコンストラクタが呼ばれ、FBookArray フィールドを初期化していることになります。もう少し具体的に実行手順が見たい場合は、(* ブレークポイント *) とコメントした所に、ブレークポイントを設置して、F7 キーを押していって下さい。詳しいやり方は、こちらにあります。F7 キーを押すごとに一文ずつ順に実行していきますので、手順が良く分かると思います。
また、生成したオブジェクトを破棄する場合には、デストラクタ Destroy を直接呼び出さずに BookShelf.Free; と Free メソッドを使っています。実際にはオブジェクトを破棄する場合には直接 Destroy は呼ばずに Free を呼ぶようにして下さい。Free メソッドはオブジェクトが nil でないかどうかをチェックしています。そして、nil でないなら Destroy を呼び出します。