我在論壇上看了很多關於指針的帖子,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。當有變化 - 沒有更多的表達 –