Иван прав: оператор ничем не отличается от обычной функции, кроме синтаксиса.
В зависимости от платформы и типа результата он (результат) может возвращаться в скрытом параметре, который действительно будет куда-то указывать. Тем не менее, это не var, а out параметр, его значение на входе в функцию не определено.
Утечка памяти в программе
Модератор: Модераторы
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Sergei I. Gorelkin
А почему такой странный порядок освобождения по счетчику ссылок? viewtopic.php?f=1&t=6753&st=0&sk=t&sd=a#p50621
А почему такой странный порядок освобождения по счетчику ссылок? viewtopic.php?f=1&t=6753&st=0&sk=t&sd=a#p50621
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Временные переменные управляемых типов освобождаются в блоке try..finally, чтобы не было утечек в случае исключения. Этот блок один на всю процедуру. Кроме того, компилятор вырабатывает некоторый избыток (по сравнению с Дельфи) временных переменных, которые иногда держат ссылки до выхода из процедуры.
Да, это не так, как в Дельфи, и по этому поводу периодически возникает много флейма...
Да, это не так, как в Дельфи, и по этому поводу периодически возникает много флейма...
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Ну, судя по результатам, при вычислении следующего выражения временные переменные предыдущего тоже освобождаются... А вот когда подходящего выражения нет, остаются до конца процедуры. Может, есть возможность вызывать какую-нибудь процедуру a-la Collect(), чтобы в явном виде освобождать?
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Временные переменные переиспользуются. Т.е. после того, как "старая" становится больше не нужна, новая (если она потребуется) размещается по тому же адресу, при этом старая освобождается. Если новая переменная на это место не требуется, то ссылка остается до конца процедуры.
Возможности освобождать временные переменные в явном виде нет.
Возможности освобождать временные переменные в явном виде нет.
