在Delphi中,Assigned是一个用于检查指针或对象引用是否已分配内存的函数,判断参数是否为nil。当指针指向有效内存地址时返回True,否则返回False。
1、基本语法与原理
语法:function Assigned(const P: Pointer): Boolean;,接受指针或对象引用参数,返回布尔值。
底层行为:实际等效于检查P <> nil,但编译器优化后效率更高3。
适用场景:主要用于验证对象实例、动态分配的内存指针或过程引用是否有效。
2、用法示例
对象有效性检查
创建对象后验证是否成功分配内存:
var Obj: TObject;
begin
Obj := TObject.Create;
if Assigned(Obj) then
ShowMessage('对象已分配')
else
ShowMessage('对象未分配');
Obj.Free;
end;
3、 窗体实例管理
防止重复创建窗体:
delphiCopy Code
if not Assigned(Form2) then
Form2 := TForm2.Create(Application);
Form2.Show;
4、结合内存释放
使用FreeAndNil替代Free可避免悬垂指针问题:
delphiCopy Code
var ps: TPerson;
begin
ps := TPerson.Create('小李', 10);
FreeAndNil(ps); // 同时释放内存并置nil
if not Assigned(ps) then
ShowMessage('对象已安全释放');
end;
5、注意事项
局限性:仅检查指针是否为nil,不验证内存内容是否有效。已释放但未置nil的对象仍可能返回True。
与Free的区别:Free仅释放对象内存,不修改指针值;FreeAndNil会同时将指针置为nil。
未初始化变量:未赋值的指针变量可能随机指向内存地址,Assigned仍返回True,需显式初始化为nil。
6、性能建议
直接调用Assigned比手动比较P <> nil更高效,因编译器会对其进行特殊优化。
1098

被折叠的 条评论
为什么被折叠?



