Как правильно освобождать память?
Добавлено: 30.08.2015 20:12:00
Доброго времени суток, что-то я совсем запутался в этих указателях, и не могу банально очистить память после использования
Есть класс:
Элементами списка fvertex являются записи типа:
Добавляю так:
И в заключении деструктор:
Как всё таки правильно удалять объекты и освобождать память?
Есть класс:
- Код: Выделить всё
tpolygon = class
private
fvertex : tlist;
fholes : tlist;
ffill_hash : tlist;
....
end;
Элементами списка fvertex являются записи типа:
- Код: Выделить всё
TPointF = record
X : Real;
Y : Real;
end;
Добавляю так:
- Код: Выделить всё
procedure tpolygon.add_vertex(x : real; y : real);
var
p : ^tpointf;
begin
new(p);
p^.x := x;
p^.y := y;
fvertex.add(p);
end;
И в заключении деструктор:
- Код: Выделить всё
destructor tpolygon.destroy();
var
i : integer;
begin
for i := 0 to fvertex.count - 1 do
begin
tpointf(fvertex[i]).free; // здесь получаю ошибку: trpolygon.pas(116,9) Error: Illegal type conversion: "Pointer" to "TPointF"
// здесь же пытался почиститься так: dispose(tpointf(fvertex[i])); ---> ошибка та же самая(если убрать приведение к tpointf то ругается, мол Error: use of NEW or DISPOSE is not possible for untyped pointers
)
end;
fvertex.destroy();
for i := 0 to fholes.count - 1 do
tpolygon(fholes[i]).free;
fholes.destroy();
for i := 0 to ffill_hash.count - 1 do
tyitem(ffill_hash[i]).free;
ffill_hash.destroy();
end;
Как всё таки правильно удалять объекты и освобождать память?