Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не получается правильно удалить объект


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

Может быть, хватит уже писать, и пора прочитать, что написали тебе в ответ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо