System.Finalize
Delphi
procedure Finalize(var V; [ Count: NativeUInt]); overload;
procedure Finalize(var V; [ Count: NativeUInt]); overload;
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
procedure | public | System.pas | System | System |
説明
動的に割り当てた変数の初期化を解除します。
動的に割り当てられた変数の割り当てを Dispose プロシージャ以外の方法で解除する Delphi コードでのみ Finalize プロシージャを使用します。動的配列は Dispose プロシージャで割り当てを解除できませんが,Finalize に渡すことで解放できます。
Dispose を使って割り当てを解除するグローバル変数,ローカル変数,オブジェクト,動的変数では,インスタンスを破棄するときにその変数が保持するすべての長い文字列とバリアントの終了処理を行うコードがコンパイル時に生成されます。
次の 2 つの条件が満たされる場合,変数の割り当てを解除するには Finalize を呼び出してその変数の終了処理を行わなければなりません。
第 1 の条件は,標準手続き Dispose 以外の方法(FreeMem を使用する方法など)で動的変数の割り当てが解除されたことです。
第 2 の条件は,その変数が長い文字列またはバリアントを保持し,そしてすべての長い文字列が空とは限らず,すべてのバリアントが Unassigned とは限らないことです。
Finalize はすべての長い文字列を空に,すべてのバリアントを Unassigned に設定するので,長い文字列とバリアントが参照していたメモリが適切に解放されます。
動的に割り当てられた文字列配列などの連続メモリブロックでは,複数の変数の割り当てを解除する場合,追加の Count パラメータを指定すると 1 回の処理ですべての変数の終了処理が行えます。
Finalize の呼び出しで指定した変数が長い文字列もバリアントも保持しない場合,コンパイラはその呼び出しを削除し,呼び出しのコードを生成しません。