delphi – 为什么Assigned对未初始化的变量返回true?
我在论坛上阅读了很多关于指针,分配函数,自由函数,FreeAndNil函数等的帖子……我已经知道自由函数不会删除指向对象的指针引用而且FreeAndNil会这样做…我读过的所有帖子都是对待的考虑到Create方法已经被执行,或者换句话说,考虑已经创建的对象.
我的问题是:为什么Assigned函数对未初始化的对象变量返回true? 举个例子: procedure TForm1.FormCreate(Sender: TObject); var Qry: TADOQuery; begin if Assigned(Qry) then ShowMessage('Assigned') else ShowMessage('Unassigned'); Qry := TADOQuery.Create(nil); if Assigned(Qry) then ShowMessage('Assigned') else ShowMessage('Unassigned'); end; 该示例显示“已分配”两次! 结论:在声明Qry之后,在执行create方法之前,Qry的指针不是NIL! 如果我把Qry:= nil;在第一行进入上面的程序一切正常……它显示’未分配’和’已分配’. 为什么?? 有没有什么安全的方法可以知道类变量是否已经执行了create方法? 解决方法
您的变量是局部变量,因此未初始化.它可以包含任何值.
documentation说:
请注意,作为实现细节,管理某些类型,甚至初始化托管类型的局部变量.托管类型的示例包括:字符串,接口,动态数组,匿名类型和变体. 你问:
如果该变量是局部变量,则答案为否.程序员有责任落在你身上.在实践中,它很少成为问题,因为良好的代码具有较短的程序,这使得您更难以滑倒.即使你这样做,编译器也会一直警告你. 其他类型的变量(如类字段和全局变量)已初始化. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |