我创建了2个对象TClient = class(TPersistent)
private
FClientID : string; //用户编号
procedure SetClientID(Value : string);
public
property ClientID : string read FClientID write SetClientID;
procedure Assign(source: TPersistent); override;
constructor Create;
destructor Destroy;
end;TLList = class(TObjectList)
private
function GetClient(Lindex: integer): TClient ;
public
property Client[windex:integer]: TClient read GetClient; procedure LoadFromDB;
constructor Create;
destructor Destroy; override;
end;
/////////
var
Test_LList1, Test_LList2 : TLList;
....
procedure Test;
begin
Test_LList1:=Test_LList1.create;
Test_LList1.LoadFromDB;
//当赋值给 test_LList1.ClientID:=1时,如何把这个值 传递给Test_LList2.ClientID 而不是传递地址!
//当test_LList1.ClientID:=2时,不在影响Test_LList2.ClientID
//下面该如何写代码 把 1的值赋值给2,而不是共享内存地址?? 如果Test_LList2:=Test_LList1 这样赋值的话,系统传递是内存地址
Test_LList2:=
end;
////////procedure TClient.Assign(source: TPersistent);
begin
if (source is TClient) then
begin
ClientID := TClient(source).ClientID;
end;
end;function TLList.GetClient(Lindex: integer): TClient ;
begin
if (Lindex < 0) or (Lindex >= Count) then
begin
result := nil;
exit;
end;
Result := TClient(Items[Lindex]);end;
procedure TLList.LoadFromDB;
var
Client : TClient;
begin
XXX...'SELECT * FROM LoClientID';
while not XXX.DataSet.Eof do
begin
Client := TClient.Create;
with Client,XXXX.dataset do
begin
ClientID := fieldByName('ClientID').AsString;
end;
Add(Client);
XXXX.DataSet.Next;
end;
XXXX.Free;
end;
private
FClientID : string; //用户编号
procedure SetClientID(Value : string);
public
property ClientID : string read FClientID write SetClientID;
procedure Assign(source: TPersistent); override;
constructor Create;
destructor Destroy;
end;TLList = class(TObjectList)
private
function GetClient(Lindex: integer): TClient ;
public
property Client[windex:integer]: TClient read GetClient; procedure LoadFromDB;
constructor Create;
destructor Destroy; override;
end;
/////////
var
Test_LList1, Test_LList2 : TLList;
....
procedure Test;
begin
Test_LList1:=Test_LList1.create;
Test_LList1.LoadFromDB;
//当赋值给 test_LList1.ClientID:=1时,如何把这个值 传递给Test_LList2.ClientID 而不是传递地址!
//当test_LList1.ClientID:=2时,不在影响Test_LList2.ClientID
//下面该如何写代码 把 1的值赋值给2,而不是共享内存地址?? 如果Test_LList2:=Test_LList1 这样赋值的话,系统传递是内存地址
Test_LList2:=
end;
////////procedure TClient.Assign(source: TPersistent);
begin
if (source is TClient) then
begin
ClientID := TClient(source).ClientID;
end;
end;function TLList.GetClient(Lindex: integer): TClient ;
begin
if (Lindex < 0) or (Lindex >= Count) then
begin
result := nil;
exit;
end;
Result := TClient(Items[Lindex]);end;
procedure TLList.LoadFromDB;
var
Client : TClient;
begin
XXX...'SELECT * FROM LoClientID';
while not XXX.DataSet.Eof do
begin
Client := TClient.Create;
with Client,XXXX.dataset do
begin
ClientID := fieldByName('ClientID').AsString;
end;
Add(Client);
XXXX.DataSet.Next;
end;
XXXX.Free;
end;
Test_LList2.Assign(Test_LList1)
如果你要把值赋给Test_LList2,你可以定一个client:Tclient;
for i:=0 to Test_LList1.count-1 do
begin
Client := TClient.Create;
i ftest_LList1.ClientID:=1时
client.assign(Test_LList1[i]);
end;
你看这样是否可以呢
A,B:TLTest;A:=TLTest.create;
B:=TLTest.create;B:=2;
A:=B;A.free; //问题A释放完后,
B.free; //B再释放就提示出错了,那么B该如何释放呢?如果不释放,会不会出现内存泄露呢?
A.free的时候 B已经被释放了
用Assign.
B:=TLTest.create; B:=2;
A:=B;
-------------------
B把B的首址赋给A,那实体B永远也不会被使用到,因为没人知道这块地址了,会出现内存泄露。