Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Динамические массивы в Delphi

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Igjule



Зарегистрирован: 20.07.2006
Сообщения: 2
Откуда: Челябинск

СообщениеДобавлено: Чт Июл 20 2006 07:25    Заголовок сообщения: Динамические массивы в Delphi Ответить с цитатой

Подскажите, кто знает:
У меня есть динамический массив, в котором я храню объекты своего класса. По сути он содержит указатели на участки памяти, содержащие значение и поля объектов.
Когда я заменяю (выполняю присваивание) один элемент массива другим, фактически в массиве меняется указатель: он после присваивания указывает на участок памяти, содержащий новый объект.
Вопрос: нужно ли удалять старый объект (метод Free) или память из под старого объекта автоматически освобождается (больше ведь на этот участок памяти ничего не указывает!!!)?
Пишу в Delphi 7.
Заранее спасибо Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
D3DoS



Зарегистрирован: 19.07.2006
Сообщения: 2

СообщениеДобавлено: Чт Июл 20 2006 21:09    Заголовок сообщения: Ответить с цитатой

ИМХО, если сравнивать с теми же сями, то должен остаться мусор по данному адресу.
_________________
>~))@> >~))@> >~))@>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Вт Июл 25 2006 22:36    Заголовок сообщения: Ответить с цитатой

Если на объект не указывает элемент массива, это еще не значит, что на него ничто не указывает. Ибо из завета программера нам известно: то, что было порождено в памяти компа человеком, и должно быть человеком низвергнуто. Более того, если массив (не важно, динамический или статический) состоит из Pointer, а элементы указывают на классы, надо зачищать не поинтер, а непосредственно класс: (SomeArray[1] as TClass).Free.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Ср Июл 26 2006 00:28    Заголовок сообщения: Ответить с цитатой

Объясню еще популярней.

Для создания элемента массива системой, по просьбе вашего прикладного софта, выделяется память.

Если вам кусок памяти больше не нужен, то верните его системе.

Если вы этого делать не будете, то получите софт с проблемой текучести памяти. Т.е. ваш софт будет пожирать память пока она у системы не кончится. Скорость "пожОра" конечно зависит от того, настолько интенсивно вы свой массив юзаете в плане создавания/удаления элементов.
Не надо так делать. Это называется "наживать геморой на свою задницу".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
sniper::p



Зарегистрирован: 04.10.2005
Сообщения: 237
Откуда: rus/73

СообщениеДобавлено: Ср Июл 26 2006 23:13    Заголовок сообщения: Ответить с цитатой

Mytilus Galloprovincialis писал(а):
(SomeArray[1] as TClass).Free.
Да, в этом смысле С++ куда элегантней Smile new Type; delete pObj
_________________
Нет предела совершенствованию
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Сб Июл 29 2006 03:22    Заголовок сообщения: Ответить с цитатой

sniper::p писал(а):
Да, в этом смысле С++ куда элегантней Smile new Type; delete pObj


Не скажи. Вот пример:
Код:

TWinControl *WinControl = new TWinControl(0);
TControl *Control = WinControl;

Писать delete Control в данном случае не верно. И если, допустим, вид delete WinControl нас чем-то не устраивает, придется написать delete (TWinControl *)Control.
А теперь сравни (Control as TWinControl).Free и delete (TWinControl *)Control.
Как говорится, те же яйца.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
sniper::p



Зарегистрирован: 04.10.2005
Сообщения: 237
Откуда: rus/73

СообщениеДобавлено: Пн Июл 31 2006 22:15    Заголовок сообщения: Ответить с цитатой

Согласен, однако, не так уж часто лично я использую приведение типа указателя перед удалением объекта Smile
_________________
Нет предела совершенствованию
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...