![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Finalize и ошибки. [D7]
AlexanderMS © (2007-03-09 08:37:00)Вот процедура удаления элемента типа записи из общего массива:
procedure TQuestions.Delete(Index: integer);
begin
// FList[Index].Answers.Free;
// FList[Index].FormatSettings.Free;
Finalize(FList^[Index]);
Dec(FCount);
if Index < FCount then
System.Move(FList^[Index + 1], FList^[Index],
(FCount - Index) * SizeOf(TQuestion));
end;
Если убрать комментарии, то ошибки появляются в самых неожиданных и "надёжных" местах. Если оставить, то ошибок нет, но я не знаю: вдруг не вся занятая ранее память освободится в результате вызова Finalize? Как сделать правильно, и что делает Finalize с объектами-полями записи вообще? Надо ли их освобождать до Finalize?
DrPass (2007-03-09 17:22:00) [1]А может быть, вообще эту чехарду не стоило было делать, а просто использовать TList?
Сергей М. (2007-03-09 08:54:00) [2]
> Надо ли их освобождать до Finalize?
Да. надо.
Цитата:
the compiler generates code that finalizes all long strings, variants, and interfaces contained by the variable when the instance is destroyed