Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.04.23;
Скачать: CL | DM;

Вниз

копировать TObjectList в TObjectList   Найти похожие ветки 

 
Цукор5   (2015-09-03 15:33) [0]

Добрый день, всем.

Подскажите, что я делаю не так?

 var Obj1,Obj2:TObjectList;
 I:Integer;
begin
 Obj1:=TObjectList.Create;
 try
   Obj1.Add(TStringList.Create);
   for I:=0 to 5 do TStrings(Obj1.Items[0]).Add("hello"+IntToStr(I));

   Obj2:=TObjectList.Create;
   try
     Obj2.Assign(Obj1);
     Memo1.Lines.Add(IntToStr(Obj2.Count))
   finally
     Obj2.Free;
   end;

 finally
   Obj1.Free;
 end;
end;


 
RWolf ©   (2015-09-03 15:41) [1]

ObjectList по умолчанию владеет объектами, а Assign не создаёт копии содержимого, оба списка ссылаются на одни и те же стринглисты.


 
Цукор5   (2015-09-03 15:48) [2]

Т.е. простыми словами, уничтожать нужно только один. Я правильно понял?

Хорошо, пусть так. Не будет ли  утечек при таком подходе? Что, если один из TObjectList находится в другом потоке? Как тут быть?


 
RWolf ©   (2015-09-03 15:58) [3]

> Не будет ли  утечек
Будет, конечно. Нужно определиться с тем, кто владеет объектами.

Что, если один из TObjectList находится в другом потоке
тогда нужно заодно продумывать доступ к стринглистам из разных потоков.


 
han_malign ©   (2015-09-03 15:59) [4]


> Т.е. простыми словами, уничтожать нужно только один. Я правильно понял?

- неправильно - создавать нужно только один...

З.Ы. где-то там была ссылка на вопрос про XYZ...


 
Цукор5   (2015-09-03 16:09) [5]

Короче, я забил. Сделал копирование и все. Нет проблем с утечками.

procedure TForm1.InfoObj(var Msg: TMessage);
 var Rec:PDataRec;
 I,II:Integer;
begin
 Rec:=PDataRec(Msg.WParam);
 List.Clear;
 if Rec^.Obj.Count>0 then
 begin
   for I:=0 to Rec^.Obj.Count-1 do List.Add(TStringList.Create);
   //
   for I:=0 to Rec^.Obj.Count-1 do
   for II:=0 to TStrings(Rec^.Obj.Items[0]).Count-1 do TStrings(List.Items[I]).Add(TStrings(Rec^.Obj.Items[I]).Strings[II]);
 end;
 Dispose(Rec);
end;


 
Юрий Зотов ©   (2015-09-03 17:20) [6]

Ужас. Не завидую тому, кому придется этот код сопровождать.

Действительно, похоже на сагу про X, Y, Z. Вы бы лучше сказали простыми словами - в чем состоит задача-то? Есть подозрение, что можно сделать проще.



Страницы: 1 вся ветка

Текущий архив: 2017.04.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.004 c
15-1460496602
Юрий
2016-04-13 00:30
2017.04.23
С днем рождения ! 13 апреля 2016 среда


2-1440135500
goga_m
2015-08-21 08:38
2017.04.23
Работа с TidHttp


2-1441283581
Цукор5
2015-09-03 15:33
2017.04.23
копировать TObjectList в TObjectList


15-1460100846
Rouse_
2016-04-08 10:34
2017.04.23
Есть у нас спецы по гуглевскому Blogger?


2-1441249805
Андрей_1
2015-09-03 06:10
2017.04.23
Преобразование xls в html