Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2015, 14:49   #1
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию Использование деструктора при удалении элемента из массива

Допустим, имеется динамический массив из n элементов типа TMytype. Происходит ли автоматическое освобождение памяти при удалении элементов массива с соответствующим уменьшением размера массива? Не нужно ли во избежание утечек памяти дополнительно вызывать деструктор?
dimavit вне форума Ответить с цитированием
Старый 17.08.2015, 14:58   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Происходит ли автоматическое освобождение памяти при удалении элементов массива с соответствующим уменьшением размера массива?
освобождение памяти занятой элементом? НЕТ.
Цитата:
Не нужно ли во избежание утечек памяти дополнительно вызывать деструктор?
Деструктор элемента? ДА.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 17.08.2015, 15:42   #3
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
освобождение памяти занятой элементом? НЕТ.

Деструктор элемента? ДА.
Спасибо. Т.е. порядок такой: сначала вызываем деструктор для какого-либо элемента массива, потом удаляем элемент массива, и, наконец, уменьшаем длину массива?
dimavit вне форума Ответить с цитированием
Старый 17.08.2015, 15:44   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ага. Почему не TList или TObjectList?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.08.2015, 16:03   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Ага. Почему не TList или TObjectList?
лучше TList<TMytype> (или TObjectList<TMytype>если TMytype - это класс).
и будет красиво.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 17.08.2015, 16:19   #6
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ага. Почему не TList или TObjectList?
Ну вообще-то предполагалось сделать так: поскольку порядок элементов в массиве не важен, то просто сначала удалить из памяти нужный элемент, на его место записать последний, ну а потом уменьшить длину массива. Что касается динамических списков, то увы, должен признаться честно, это как-то не очень доходит.
dimavit вне форума Ответить с цитированием
Старый 17.08.2015, 16:54   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Что касается динамических списков, то увы, должен признаться честно, это как-то не очень доходит.
когда дойдёт, не забудь сказать "спасибо" и лайкнуть.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 17.08.2015, 17:08   #8
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Если TMyType - объект, то вызывай FreeAndNil и спокойно уменьшай длину. Только помни: Если элемент не в конце массива, то сначала сдвинь массив на элемент ближе к началу, начиная со следующего элемента за удаляемым.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 17.08.2015, 17:08   #9
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
когда дойдёт, не забудь сказать "спасибо" и лайкнуть.
Всенепременно, если поможешь разобраться
dimavit вне форума Ответить с цитированием
Старый 17.08.2015, 17:12   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
если поможешь разобраться
тебе гугол за неуплату отключили? тогда спрашивай.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
EListError при удалении 0-ого элемента ListView Человек_Борща Общие вопросы Delphi 2 23.10.2011 16:48
добавление элемента массива при подключении нового пользователя Lokos Работа с сетью в Delphi 10 01.11.2010 02:27
Использование конструкторов и деструктора при проектировании пользовательского класса НеважНо Общие вопросы C/C++ 1 22.01.2010 14:56
Использование виртуального деструктора Fataller Общие вопросы C/C++ 3 12.12.2009 22:08
PHP: использование элемента массива как массива Sudia Помощь студентам 1 20.02.2009 20:48