小编use*_*858的帖子

为什么Assigned对未初始化的变量返回true?

我看了很多帖子在论坛上指点一下,Assigned功能,Free性能,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;
Run Code Online (Sandbox Code Playgroud)

该示例显示"已分配"两次!

结论:在Qry声明之后,在创建方法执行之前,指针Qry就不是NIL!

如果我把Qry := nil;第一行放到上面的程序中,一切正常......它显示'未分配'和'已分配'.

为什么??

有没有什么安全的方法可以知道类变量是否已经执行了create方法?

delphi variables null pointers

6
推荐指数
3
解决办法
1092
查看次数

标签 统计

delphi ×1

null ×1

pointers ×1

variables ×1