Delphi Assigned

在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更高效,因编译器会对其进行特殊优化。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值