NeoAnomaly
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Троллим? Код: type TTest = record FStr: string; end; PTest = ^TTest; procedure Test; var LTest: PTest; begin ReportMemoryLeaksOnShutdown := True; GetMem(LTest, SizeOf(TTest)); FillChar(LTest^, SizeOf(TTest), 0); LTest.FStr := 'Here is some leakage'; FreeMem(LTest); end; | | Цитата: А так же можно представить, что (Instance + SizeOf(Pointer)) = ^record | Eternal_Shield, не, ну серьёзно? Я думал мы всётаки говорим про практический подход, а не про всякие извращения... В примере кода - код написан с ошибками, т.к. Цитата: Records allocated on the stack unless they are declared globally or explicitly allocated using the New and Dispose function | Отсюда и утечка, т.к. New есть не что иное, как GetMem + InitializeRecord, а Dispose = FinalizeRecord + FreeMem. По поводу натягивания класса, как часто ты такое пишешь в коде? Ок, приведу другой пример, который не решить без структур - реализация какого либо типа с перегрузкой операторов. Added Кстати, не могу сообразить, как класс натянуть на данные с ANYSIZE массивом, не конструируя при этом класс ручками | Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 08:14 26-12-2017 | Исправлено: NeoAnomaly, 09:28 26-12-2017 |
|