Pointer与对象变量的关系问题。我错在哪? ( 积分: 200 )

  • 主题发起人 主题发起人 hegyi
  • 开始时间 开始时间
H

hegyi

Unregistered / Unconfirmed
GUEST, unregistred user!
程序中报错,不知道错在哪,也不知道为为什么错,请高手指出并给讲讲原因,谢谢。

我在程序中定义了以下类
TSimpleClient = class(TObject)
UserID:Integer;
timerRemain:integer;
Thread:pointer;
end;

有一个ListView,以下是增加项的过程,目的是将Treeview的Item与线程互相关联
procedure TServerMgmt.AddAUser(ComBlock:TComBlock;AThread: TIdPeerThread);
var
l:TlistItem;
Client:TsimpleClient;
begin
……
l:=lvUsers.Items.Add;
Client:=TSimpleClient.Create;
client.timerRemain:=20;
Client.Thread:=Athread;
l.Caption:=inttostr(comBlock.SendID)
//列出在线人员的ID号
……
l.Data:=pointer(Client); //挂到Item上,便于通过Item直接找到连接线程(Athread)
Athread.Data:=l
//以便根据Athread可以直接找到Item
end;

在Listview的Item删除时,应当清理内存:
procedure TServerMgmt.lvusersDeletion(Sender: TObject
Item: TListItem);
var
Client:TSimpleClient;
aThread : TIdpeerThread ;
begin
if item.Data=nil then exit;
Client:=TSimpleClient(Item.data) ; //应当是Client:=Pointer(Item.data)?
aThread:=TIdpeerThread(Client.Thread);
aThread.Connection.disConnect;
aThread.Data:=nil;//aThread.data实际上应当等于Item,去掉关联。也许没必要。
Client.Thread:=nil;
Client.Free; //这里报错!
item.Data:=nil;
end;

我的问题出在Pointer与对象的关系没弄清楚。Pointer是一个指针,比如上面的Client.Thread,Object对象变量中也是存放地址,其实也是一个指针,但一个Pointer变量与Object变量之间的赋值关系应当是怎样的呢?比如:
A,B:Tobject;
P:Pointer;
p:=A;
B:=P;
这时对B的操作和对A的操作是同等的吗?对TObject(P)的操作与对A同等吗?
 
Delphi 中其实对象都是以指针形式存在的,如你举的例子:
A,B:Tobject;
P:Pointer;
p:=A;
B:=P;
这时对B的操作和对A的操作是同等的吗?对TObject(P)的操作与对A同等吗?

上面的操作是将A,B的指向互转而已,
1. 不等同
1. 等同
 
后退
顶部