CBDepotName.Items.AddObject(FieldByName('DepotName').AsString,
        TObject(FieldByName('DepotNo').AsString));
请说明原因??

解决方案 »

  1.   

    应该没有问题,因为你强行转换是Query.Field....而不是一个新的Object
     不过我一般很少这么写的
      

  2.   

    泄漏是不会泄漏,但你的这种用法本来就不对~~
    FieldByName('DepotNo').AsString 相当于局部的string变量~~
    跳出这个堆栈后,其资源就已经失效了~~如果是整数类型就直接存整数,不要换成字符~~
    CBDepotName.Items.AddObject(FieldByName('DepotName').AsString,
            TObject(FieldByName('DepotNo').AsInteger));
      

  3.   

    楼上说得有道理,就由于我的字段是varchar的类型,我才发此贴来问
    个明白。以前也有人不提倡这种的用法,不知道是什么原因?
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      P: PChar;
    begin
      GetMem(P, 1);
      FreeMem(P, 1);  P[0] := 'b';
      Caption := P[0]; //访问残留物,有什么感觉?~~
    end;
      

  5.   

    不过请问楼上为什么存为 AsInteger 这个类型;
    就不会释放掉呢! 我...也太.....
      

  6.   

    ……TObject、Integer都是四个字节~~
    用四个字节保存四个字节的内容需要开辟其他资源吗?~~string也是四个字节,为什么能存储大于四个字节的内容?~~
    因为string是一个指针,string只保存数据所在的位置,而不是其数据的内容,明白没有?~~现在理解不了,以后会理解的~~
    解决问题先~~CBDepotName.Items.Add(FieldByName('DepotName').AsString);
    TempStringList.Add(FieldByName('DepotNo').AsString); //可以借另一个列表来存储~~