System.Assigned

提供: RAD Studio API Documentation
移動先: 案内検索

Delphi

function Assigned(var P): Boolean;

プロパティ

種類 可視性 ソース ユニット
function public System.pas System System

説明

ポインタ変数や手続き変数が nil(代入されていない)かどうかを検査します。


Assigned を使用すると、P で参照されるポインタまたは手続きが nil かどうかを判定できます。P はポインタ型または手続き型の変数参照でなければなりません。

Assigned(P) は、ポインタ変数に対する P <> nil の検査や、手続き変数に対する @P <> nil の検査に相当します。

Assigned は、Pnil であれば False を返し、そうでない場合は True を返します。

ヒント: 以下のように、イベント オブジェクトや手続きオブジェクトが代入済みかどうかを検査する場合、nil かどうかを直接検査することはできません。Assigned を使用するのが正しいやり方です。

 var
   LNotifyEvent: TNotifyEvent;
 
 begin
   if LNotifyEvent <> nil then    { This is not OK and generates compiler error. }
     Writeln('something');
 
   if Assigned(LNotifyEvent) then { This is OK. }
     Writeln('something');
 end;

ヒント: 特定のケースでは、Assigned(Something) を使用する場合と Something <> nil を使用する場合で違いがあります。たとえば、以下のコードで、Assigned(LMyFunction) では LMyFunction 変数が実際に代入済みかどうかを確認しているのに対して、LMyFunction<> nil では LMyFunction の結果値が代入済みかどうかを確認しています。

 function MyFunction: Pointer;
 begin
   Result := nil;
 end;
 
 type
   TMyFunction = function: Pointer;
 
 var
   LMyFunction: TMyFunction = MyFunction;
 
 begin
   Writeln('Statement "LMyFunction <> nil" evaluates to: ', LMyFunction <> nil);
   Writeln('Statement "Assigned(LMyFunction)" evaluates to: ', Assigned(LMyFunction));
 end.

出力は以下のようになります。

 Statement "LMyFunction <> nil" evaluates to: FALSE
 Statement "Assigned(LMyFunction)" evaluates to: TRUE

メモ: Assigned では、ダングリング ポインタ(nil ではないが、有効なデータをもう指していないポインタ)を検出できません。たとえば、Assigned のコード例(SystemAssigned)では、Assigned は P が有効でないことを検出しません。

関連項目

コード例