![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не получается правильно удалить объект
CMOS © (2005-11-19 21:32:00)Делаю неправильно - прога работает. Правильно вешается.
Я создал массив объектов. Чтобы удалить n-ый объект я присваиваю все значения последнего (gMax-1) объекта в массиве n-му. Затем уничтожаю последний (g[gMax-1].Free|Destroy) и уменьшаю размер массива на 1. Таким образом внешне кажется что n-ый объект уничтожился, на самом деле он встал на место последнего, сохранил он только свой номер n.
Все это происходит в методе Die.
g[n].Die
Если объявляю этот метод как обычный то "Project raised exception class EAccessViolation..."
Если как деструктор, то все работает правильно. Но ведь в этом случае едаляется n-ый элемент, a максимальный должен остаться существовать? Вот код:
destructor Life.Die;
var m: Word;
begin
m:= fg[x, y];
f[x, y]:= f[x, y] xor 1;
fg[g[gMax-1].x, g[gMax-1].y]:= m;
g[m]:= g[gMax-1];
//g[gMax-1].Free;
Dec(gMax);
SetLength(g, gMax);
end;
tesseract (2005-11-21 10:27:00) [1]Используй Tlist.
Если хочешь написать сам, то вот исходный код EzDSL - очень хорошей библиотеки (несколько устарела но всё ещё интересна).
ftp.turbopower.com/pub/misc/funcs
Brother (2005-11-21 06:05:00) [2]
> http://www.delphimaster.ru/cgi-bin/forum.pl?id=1132392584&n=18
> http://www.delphimaster.ru/cgi-bin/forum.pl?id=1132392648&n=18
>
> Может быть, хватит уже писать, и пора прочитать, что написали
> тебе в ответ?
Хе, долго смеялся!
CMOS (2005-11-20 20:25:00) [3]Там ничего нет (сам загляни)
Джо (2005-11-19 21:57:00) [4]Чукча не читатель...
Virgo_Style (2005-11-19 21:36:00) [5]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1132392584&n=18
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1132392648&n=18
Может быть, хватит уже писать, и пора прочитать, что написали тебе в ответ?