我們可以有關聯的對象到的TStringList一起添加字符串:如何區分TStringList中的指針和TObject項?
list: TStringList;
obj: MyObject;
obj := MyObject.Create();
list.AddObject("real object", obj);
此外,它可以非常方便簡單的字符串的指針,也就是一個整數值連接,像這樣:
list.AddObject("just an index", Pointer(7));
如果我以後訪問這個列表中的一個對象如何知道它是一個MyObject還是一個指針?我想是這樣的:
for i := 0 to list.Count-1 do
if list.Objects[i] is MyObject then
begin
// ...
// Do something with list.Objects[i]
// ...
end;
但是這顯然會導致訪問衝突,如果list.Objects [I]只是一個指針。 在此先感謝!
最好的辦法是不要混用兩種。如果你想存儲的對象,存儲對象,然後你可以和'nil'比較或者使用'Assigned'。如果你想存儲整數,存儲整數(這是'指針(7)'所做的 - 它不存儲*指針*,它存儲整數類型轉換爲一個指針,通過編譯器抱怨) –
一般而言,你可以假設低於大約$ FFFF的地址是假指針 - 不是對象,你沒有對該內存範圍的讀訪問權限。 t找到文檔來支持它。 –
這個問題背叛了好奇心(好)或者魯莽(壞)。避免在實際代碼中使用不安全或破碎的想法,否則會發生不好的壞事。如果這是好奇心,正如我在這裏假設的那樣,那麼可以考慮通過這個問題來思考。爲什麼不堅持Tobbs併成爲數據持有者? Tmyintegerdata ... –