我在论坛上看了很多关于指针的帖子,Assigned
函数,Free
函数,FreeAndNil
函数等等...我已经知道了自由函数不会删除指向指定对象的指针引用并且FreeAndNil
是不是......所有文章I阅读对待这个主题考虑Create
方法已经执行,或换句话说,考虑一个已经创建的对象。为什么Assigned对未初始化的变量返回true?
我的问题是:为什么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
已被声明并且在其创建方法执行之前,指向Qry
的指针不是NIL
!
如果我把Qry := nil;
放在第一行到上面的程序中,一切正常......它显示'Unassigned'和'Assigned'。
为什么?
是否有任何安全的方法来知道一个类变量是否已经执行了它的create方法?
看看这个:http://stackoverflow.com/questions/132725/are-delphi-variables-initialized-with-a-value-by-default – idursun
“类变量已经执行了它的create方法“变量没有任何方法! 'var o:TObject;我:整数; s:弦乐;我:= TStringList.Create.Count; s:= TStringList.UnitName; o:= TStringList.Create;' - 这三个语句中的每一个都有相同的结构:有一些任何表达式,它计算一些任何值;并且存在值(但不是表达式,该点不再存在)的变量被保存到。当表达式被执行时(用这些“方法”)还没有var。当有变化 - 没有更多的表达 –