|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.04.2019, 01:43 | #1 |
Пользователь
Регистрация: 30.01.2010
Сообщений: 23
|
Освобождение памяти у функции при возврате класса
Есть к примеру функция
Код:
мой сайт о Таиланде https://tailand-gid.org
|
08.04.2019, 06:24 | #2 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
result:=sortLSI; Тут присвоение идёт по механизму присвоение указателя указателю. Поэтому если вы освободите sortLSI, то все кто будет работать с result получат невалидные данные.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
09.04.2019, 10:36 | #3 | |
Пользователь
Регистрация: 30.01.2010
Сообщений: 23
|
Цитата:
Код:
мой сайт о Таиланде https://tailand-gid.org
|
|
09.04.2019, 10:44 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Нет конечно. Функция возвратит поломанный sortLSI. Освобождай после вызова функции
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
09.04.2019, 18:26 | #5 |
Пользователь
Регистрация: 30.01.2010
Сообщений: 23
|
Это на 1 сообщение или на второе ответ?
мой сайт о Таиланде https://tailand-gid.org
|
10.04.2019, 07:45 | #6 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
это на фразу
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
10.04.2019, 22:57 | #7 |
Пользователь
Регистрация: 30.01.2010
Сообщений: 23
|
Что то я запутался. Давайте на конкретном примере.
Код:
Код:
В обработчике кнопки мы освободили FSortLSI, освободится ли переменная sortLSI? Если можно - дайте ссылки где можно почитать о правилах освобождения памяти классов.
мой сайт о Таиланде https://tailand-gid.org
|
11.04.2019, 00:22 | #8 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
можно сделать так
Код:
Код:
Код:
Последний раз редактировалось Aliens_wolfs; 11.04.2019 в 00:38. |
11.04.2019, 06:09 | #9 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Вот смотри у вас Create 2 раза, а Free 1 раз. Это неправильно.
Здесь у вас утечка памяти. Объект вы создали и тут же заменили его указатель другим. Тем самым у вас в памяти получился объект на который не указывает ни одна переменная. Выкинуть лишний Create и всё. Какой из 2-х решать вам. Я бы выкинул бы первый. Если делать по уму, то следует отказаться от функций для классов. Как у любого правила у него есть исключения - класс строитель. - интерфейсные объекты. В первом случает мы должны обозвать функцию как Create. К примеру ElementCreate. А во втором случае работает авто подсчёт ссылок и там объект на который никто не ссылается автоматически удаляется. Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
11.04.2019, 09:29 | #10 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
А объект, ссылка на который находится в данной переменной. А также м.б. (ссылка на ЭТОТ же объект) еще в десятке других переменных. sortLSI, FSortLSI, result --к примеру. РАзные переменные, но один и тот же объект. НО освободить (Free) объект мы должны РОВНО один раз. при этом(после Free) ВСЕМИ прочими ссылками(переменными) мы НЕ сможем (и не имеем права) пользоваться. при желании(или необходимости) мы можем заменить их(значения переменных) :=nil. Код:
sortLSI дальше НЕ используется, так что...
программа — запись алгоритма на языке понятном транслятору
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Утечка памяти [Освобождение памяти массива] | denis76560 | Общие вопросы Delphi | 4 | 27.11.2016 18:20 |
освобождение памяти | Homa_1983 | Общие вопросы C/C++ | 7 | 31.08.2013 14:36 |
преобразование к QString при возврате из функции | exelim | Общие вопросы C/C++ | 1 | 05.08.2013 18:45 |
Освобождение памяти от экземпляра класса | Mixim | Общие вопросы .NET | 8 | 05.01.2011 17:27 |
Освобождение памяти | VadEr | Общие вопросы Delphi | 2 | 17.04.2009 22:23 |