オブジェクトの作成,インスタンス化,破棄
オブジェクト モデルの利用:インデックス への移動
ボタンや編集ボックスなど,フォームデザイナで使用するオブジェクトの多くは設計時と実行時の両方で表示されます。一方,コモンダイアログボックスなど,実行時にしか表示されないオブジェクトもいくつかあります。また,タイマーやデータソースコンポーネントなど,実行時にはビジュアルな表現手段を一切持たないオブジェクトもあります。
独自のクラスを作成することもできます。たとえば,Name,Title,HourlyPayRate の各プロパティを持つ TEmployee クラスを作成するとします。さらに,HourlyPayRate フィールドのデータを使用する CalculatePay メソッドを追加して,給与額を計算するとします。この場合,TEmployee 型は次のように宣言できます。
type TEmployee = class(TObject) private FName: string; FTitle: string; FHourlyPayRate: Double; public property Name: string read FName write FName; property Title: string read FTitle write FTitle; property HourlyPayRate: Double read FHourlyPayRate write FHourlyPayRate; function CalculatePay: Double; end;
上で定義したフィールド,プロパティ,メソッドだけでなく,TEmployee は TObject のメソッドをすべて継承しています。この例のような型宣言をユニットの interface 部か implementation 部に置き,次に,Create メソッド(TEmployee が TObject から継承したメソッド)を呼び出して新しいクラスのインスタンスを作成します。
var Employee: TEmployee; begin Employee := TEmployee.Create; end;
Create メソッドをコンストラクタと呼びます。コンストラクタは新しいインスタンスオブジェクトにメモリを割り当て,そのオブジェクトへの参照を返します。
フォーム上のコンポーネントは自動的に作成および破棄されます。ただし,オブジェクトをインスタンス化する独自のコードを記述した場合は,オブジェクトの破棄処理も自分で書かなければなりません。どのオブジェクトも TObject から Destroy メソッド(デストラクタという)を継承しますが,オブジェクトを破棄するには Free メソッドを使用するようにしてください。Free メソッドを使用すると,Destroy を呼び出す前に nil 参照かどうかをチェックすることができます。なお,Free メソッドも TObject から継承されています。次に例を示します。
Employee.Free;
上の例では,Employee オブジェクトを破棄して,メモリの割り当てを解除しています。