Главная страница
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
2-1440419749
guest
2015-08-24 15:35
2017.04.23
получить путь к Users...


2-1440661852
goga_m
2015-08-27 10:50
2017.04.23
Параметры формы


6-1283241621
RGV
2010-08-31 12:00
2017.04.23
Socks5


8-1240846731
Витя
2009-04-27 19:38
2017.04.23
Как сделать чтоб MediaPlayer воспроизвадил видео на panel


15-1460496602
Юрий
2016-04-13 00:30
2017.04.23
С днем рождения ! 13 апреля 2016 среда