Конференция "Начинающим" » Record в generic Tlist<> - нужно ли их освобождать
 
  • Кто б сомневался © (04.01.17 21:33) [0]
    type
     TMyRecord = record
       MyString: string;
       MyDouble: Double;
       MyInteger: Integer;
     end;

    TDBList = TList<TDBRec>;

    procedure
    var
     vDBRec: TDBRec;
    begin
     fList.Add(vDBRec);

    end;


    Нужно ли дополнительно уничтожать рекорды, или достаточно вызвать fList.Free.
    По идее вроде не нужно?
  • Kerk © (04.01.17 21:52) [1]
    Не нужно. Я честно говоря плохо себе представляю как уничтожать рекорды вообще.
  • Кто б сомневался © (04.01.17 21:53) [2]
    // Kerk ©   (04.01.17 21:52) [1]

    Например обнулять строки.
    Dispose вызвать.
  • Kerk © (04.01.17 22:03) [3]
    Строки точно не нужно обнулять. Там магия компилятора. Вот если там какие-то указатели или классы, то вручную, да.
  • Игорь Шевченко © (04.01.17 23:03) [4]

    > По идее вроде не нужно?


    По идее нужно посмотреть исходник и увидеть там вызов Finalize
  • DVM © (05.01.17 00:38) [5]

    > Кто б сомневался ©   (04.01.17 21:33) 

    Ты привел какой то странный код в качестве примера. Пихаешь в Tlist переменную выделенную на стеке. Ты когда ее не пихаешь в TList, то ведь не задумываешься же над уничтожением? Почему тут вдруг задумался?
  • Игорь Шевченко © (05.01.17 11:12) [6]

    > Ты привел какой то странный код в качестве примера. Пихаешь
    > в Tlist переменную выделенную на стеке


    А что тут странного ? В Tlist будет помещен не адрес, а значение, а оно хоть на стеке, хоть где.
  • DVM © (05.01.17 13:13) [7]

    > Игорь Шевченко ©   (05.01.17 11:12) [6]


    > А что тут странного ?


    Я бы понял если бы у него возник вопрос с освобождением памяти под запись, если бы он пихал в List указатель на нее. Ведь выделили память мы сами, резонно поинтересоваться, не будет ли список сам очищать ее по аналогии с TObjectList.

    Здесь же мы пихаем в список переменную выделенную на стеке, об очищении памяти под которую мы не заботимся специально обычно. Она будет скопирована в результате добавления в список в другую такую же, память под которую выделит сам List. Резонно предположить, раз список сам память выделил, то и сам освободит. Иначе было бы нелогично.
 
Конференция "Начинающим" » Record в generic Tlist<> - нужно ли их освобождать
Есть новые Нет новых   [118639   +35][b:0][p:0]