| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Классы и списки |
| Автор: Марцелл 17.5.2008, 04:52 | ||||
| Решил, вот, упорядочить знания. Имеется класс, например TMyClass. Имеется список, TList.
2 процедуры : создание и удаление
Вопросы : 1. Процедура btnCreateClick, pMyClass является указателем на экземпляр класса, конструктор класса, кажется, возвращает указатель на созданный экземпляр. Почему при pMyClass:=TMyClass.Create(Self) пишет о несовместимости типов? Интуитивно понятно, но никак в голове не укладывается. 2. Грамотно ли в btnCreateClick реализовано создание экземпляров класса с последующим добавлением в список? Процедура New(pMyClass) просто выделяет память под укаатель? 3. Процедура btnDestroyClick : разрушаю экземпляры TMyClass, указатели на которые хранятся в TList : pMyClass.Destroy. Таким образом освобождаю память выделенную для экземпляра TMyClass?. Процедура Dispose(pMyClass) освобождает память, выделенную под указатель (4байта)? 4. pMyClass.Destroy и pMyClass^.Destroy, как я понимаю, сработают одинаково? 5. На каждом шаге цикла в btnDestroyClick удаляю из списка освободившийся элемент : List.Delete(i) и происходит выход за пределы массива. Да, при List.Delete(i) индексы, походу сдвигаются на 1. Может быть надо использовать List.Delete(0)? |
| Автор: Felan 19.5.2008, 07:30 |
| Мда... реально горе от ума Про уже сказали. Далее: Во первых Ненужно. Конструктор сам выделяет память. Во вторых Лечше Free, а еще лучше FreeAndNil(pMyClass); Free проверяет указатель на nil и вызывает Destroy, а FreeAndNil потом ему еще и nil присваивает. Делать Dispose ссылочной переменной не нужно. Она освободится автоматически так же как и примитивные типы. Про C++ что ли читал много? |
| Автор: Rennigth 20.5.2008, 12:28 |
явно |