我在VCL Forms Application中有这段代码:
implementation
{$R *.dfm}
var
MyBitmap: TBitmap;
procedure TFormMain.FormCreate(Sender: TObject);
begin
MyBitmap := TBitmap.Create;
end;
procedure TFormMain.FormDestroy(Sender: TObject);
begin
if Assigned(MyBitmap) then
MyBitmap.Free;
end;
procedure TFormMain.Button1Click(Sender: TObject);
begin
if Assigned(MyBitmap) then
MyBitmap.Free;
end;
当我第二次点击按钮时,我在按钮的点击处理程序中的MyBitmap.Free;
中出现了访问冲突。但是,在第一次按下按钮后,MyBitmap
不再被分配。那么为什么条件if Assigned(MyBitmap) then
在第二次按钮点击时不起作用,显然它在第一次点击按钮时有效?
Delphi 10.1 Berlin Update 2
答案 0 :(得分:6)
Assigned
函数仅检查指针为Nil
。它不会检查它是否指向现有对象。在释放它之后,您需要将其设置为Nil
,以使Assigned
函数按预期工作。 FreeAndNil
执行两条指令。