コンストラクタとデストラクタ

コンストラクタは、オブジェクトの生成と初期化を行うメソッドです。コンストラクタは、キーワード 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 を呼び出します。


up next
Last update: 2002/8/26