指针问题,在线等 ( 积分: 100 )

  • 主题发起人 主题发起人 wsp_731
  • 开始时间 开始时间
var
P : TPerson;
begin
P := TPerson(FPersonList.Items)

I就是序号,你自己管理序号
 
我测试了,Tlist也只是管理指针呀,并没有管理实际的对象,当把值赋过去的时候,然后再释放原来的对象,那么它就不好用了,我要解决的正是这个问题
 
我现在想做的就是申请一个指针,然后能让这个指针申请一定的空间,然后把对象能复制到这个空间中去,那么什么问题都就解决了
 
唉……,我看我是说不清楚了,

我测试了,Tlist也只是管理指针呀,并没有管理实际的对象,当把值赋过去的时候,然后再释放原来的对象,那么它就不好用了,我要解决的正是这个问题

你赋什么值过去,释放对象当然就没有了,把你的代码贴出来,干活去了
 
TList可以管理对象,Tlist.Add(对象)即可,TPerson(FPersonList.Items).Free释放对象.
 
当我把一个对象付给Tlist后,然后我再把原来的对象释放,那么Tlist的那个对象也就不好用了亚,你有qq么,我的qq是41979259
 
Tlist管理的是一个指向那个对象的指针,而是不是对象本身,当赋完值之后,然后将原来的对象都是放了,那么Tlist的对象指针也就不好用了亚
 
Tlist放了一个后要调用TList.Delete删索引
=======================================
b :=TButton.Create....
Tlist.Add(b);
b.Free;///不要该句,放了就玩完了.
 
就是呀,我也是这个问题,把原来的对象是放就完了,但是好像简单的对象可以,像tperson这样的对象,如果只有两个数性的还可以,如果有一个属性是一个类,好像就不行了
 
如果有一个属性是一个类?什么意思,对象未释放就可以操作呀。
 
TList stores an array of pointers,他是一个指针数组呀,指向的是对象的实际空间,如果负值以后,把他指向的那个对象free,那么它的指针就不好用了呀,怎么解决这个问题呢
 
我要是有100个对象,都不释放的话,我就根本用不着这个东西了不适,我是这样想的,我要用一个对象作为参数,付给我的一个大的对象,就像一张单据,包括很多单据条目,单据条目是一个对象,要把很多单据条目付给单据,然后整体处理单据
 
例如:
TPerson(list.items[3]).Free;
list.Delete(3);//不要少这句,Index=3出记录的对象不存在,删除索引
======================================================================
list 只是记录对象指针,也就是数字,Delete只是删除数字,数字(指针)指向的对象它才不管,也管不了,管的了不成神仙了,所以先要Free对象。
 
只有重新建立一个对象,让TPerson实现一个Assign方法,把值赋过去,然后把对象删除,因为你要的只是值而已

TPerson = class
procedure Assign(Value : TPerson);
……
end;

percedure TPerson.Assign(Value : TPerson);
begin
Self.Name := Value.Name;
……
end;

传的时候

procedure xxxxx(P : TPerson);
var
P_ : TPerson;
begin
P_ := TPerson.Create;
P_.Assign(P);
……
end;

最后在外面把P释放掉
 
但个对象复制使这个样子了,如果我还有一个对象要复制到另一个对象里面怎么办,我则么仰泳程序生成很多对象
 
chenybin
非常感谢你的帮助,嗬嗬,问题解决了
 

Similar threads

回复
0
查看
876
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
后退
顶部