这样做会不会造成内存泄漏??
CBDepotName.Items.AddObject(FieldByName('DepotName').AsString,
TObject(FieldByName('DepotNo').AsString));
请说明原因??
问题点数:50、回复次数:12Top
1 楼xingyu(海)回复于 2004-04-03 12:52:10 得分 2
no,TObject没有创建Top
2 楼gb2008()回复于 2004-04-03 13:04:28 得分 2
应该没有问题,因为你强行转换是Query.Field....而不是一个新的Object
不过我一般很少这么写的Top
3 楼sxy_9761(暗里着迷)回复于 2004-04-03 13:31:11 得分 1
不会Top
4 楼kl2000()回复于 2004-04-03 13:36:13 得分 0
请继续! 看看还有没有不同的看法!Top
5 楼ttzzj(┊标识符┊)(I'm sorry, can you speak Java?)回复于 2004-04-03 13:38:08 得分 1
不会,它的项里的数据只是一个地址Top
6 楼hujinger(克沙)回复于 2004-04-03 13:48:38 得分 1
不会!!Top
7 楼zswangII(伴水清清)(一贴不灌,何以灌天下?)回复于 2004-04-03 13:57:02 得分 43
泄漏是不会泄漏,但你的这种用法本来就不对~~
FieldByName('DepotNo').AsString 相当于局部的string变量~~
跳出这个堆栈后,其资源就已经失效了~~
如果是整数类型就直接存整数,不要换成字符~~
CBDepotName.Items.AddObject(FieldByName('DepotName').AsString,
TObject(FieldByName('DepotNo').AsInteger));
Top
8 楼kl2000()回复于 2004-04-03 14:06:54 得分 0
楼上说得有道理,就由于我的字段是varchar的类型,我才发此贴来问
个明白。以前也有人不提倡这种的用法,不知道是什么原因?Top
9 楼zswangII(伴水清清)(一贴不灌,何以灌天下?)回复于 2004-04-03 14:40:44 得分 0
procedure TForm1.Button1Click(Sender: TObject);
var
P: PChar;
begin
GetMem(P, 1);
FreeMem(P, 1);
P[0] := 'b';
Caption := P[0]; //访问残留物,有什么感觉?~~
end;
Top
10 楼kl2000()回复于 2004-04-03 14:54:58 得分 0
不过请问楼上为什么存为 AsInteger 这个类型;
就不会释放掉呢! 我...也太.....
Top
11 楼zswangII(伴水清清)(一贴不灌,何以灌天下?)回复于 2004-04-03 15:18:38 得分 0
……
TObject、Integer都是四个字节~~
用四个字节保存四个字节的内容需要开辟其他资源吗?~~
string也是四个字节,为什么能存储大于四个字节的内容?~~
因为string是一个指针,string只保存数据所在的位置,而不是其数据的内容,明白没有?~~
现在理解不了,以后会理解的~~
解决问题先~~
CBDepotName.Items.Add(FieldByName('DepotName').AsString);
TempStringList.Add(FieldByName('DepotNo').AsString); //可以借另一个列表来存储~~Top
12 楼kl2000()回复于 2004-04-03 15:46:33 得分 0
OK!Top




