|
|
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Есть запись Код: pascal 1. 2. 3. 4. Делаю массив записей Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Почему так происходит и если это нормально, то как тогда освобождать память? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2020, 08:47:14 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
TArray - это не класс. Освобождать не нужно. Полностью аналогично строке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2020, 08:58:38 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Sinemurius TArray - это не класс. Освобождать не нужно. Полностью аналогично строке т.е. Код: pascal 1. будет достаточно? и при этом все rv: rVariables;, которые вошли в массив также будут уничтожены? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2020, 09:03:09 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
antox, Если массив содержит записи, которые содержат управляемые типы, то можно вообще ничего не делать... Как только переменная выйдет за область видимости, память освободится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2020, 10:50:26 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. Законно, это не конструктор, это синтаксический сахар... Код: pascal 1. аналогично Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2020, 10:52:53 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Классно! Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2020, 11:25:25 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
X-Cite Законно, это не конструктор, это синтаксический сахар... Только запутывает, имхо. Зря они его под конструктор сделали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 10:34:16 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Василий 2, Не нравиться, не пользуйся. Можешь сделать так: varr := [rv, rv, rv, rv]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 13:36:27 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Василий 2 Только запутывает, имхо. Зря они его под конструктор сделали. Код: pascal 1. 2. 3. 4. И тогда если в коде вижу Код: pascal 1. сразу понимаю, что никакого Free не нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 15:51:39 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
rgreat Не нравиться, не пользуйся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 15:52:59 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Реализация через конструктор полезна в режиме инлайн переменных. Достаточно одной строчки и для создания и для инициализации. Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 15:54:47 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Именно по этому не пользуюсь ни одним record-конструктором. Чтобы не путаться Скоро разницы между классом и рекордом в этом плане уже не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 15:56:16 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
rgreat Реализация через конструктор полезна в режиме инлайн переменных. Код: pascal 1. или Код: pascal 1. я считаю, что идет работа с классом. Функция _Vasilisk_ Код: pascal 1. rgreat Скоро разницы между классом и рекордом в этом плане уже не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 16:13:26 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Когда они придумают рекорд-деструктор вот тогда и не будет. Но тогда получится у них обычный object ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 16:22:17 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ rgreat Не нравиться, не пользуйся. Если следовать стилистике, то когда видишь TArray<T>.Create - то это всегда массив... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 16:36:51 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
X-Cite Если следовать стилистике, то когда видишь TArray<T>.Create - то это всегда массив... Код: pascal 1. ? А если Код: pascal 1. ? Вот поэтому, чтобы каждый раз не вспоминать, что это за тип - простое правило: Create только для классов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 18:23:07 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Если у тебя есть проблемы с запоминанием что есть что в типах, добавляй префиксы/постфиксы. Типа TMyTypeArray. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 18:58:31 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
rgreat добавляй префиксы/постфиксы. Зачем что-то запоминать, если можно просто не делать опасных вещей? Знаешь историю про Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 19:10:44 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Зачем что-то запоминать, если можно просто не делать опасных вещей? У меня никогда не было проблем с тем что бы я путал класс, массив и рекорд. Если я точно не помню - смотрю определение типа. Знаешь историю про Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ?With - старая боль совсем другого типа. И имхо там оснавная проблема даже не в том что оно изначально может быть криво написано из-за, а в том что при переопределении атрибутов и свойств типа может незаметно поменяться работа ПО в произвольном месте кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 19:33:47 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2020, 19:45:32 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
rgreat У меня никогда не было проблем с тем что бы я путал класс, массив и рекорд. Если я точно не помню - смотрю определение типа. В данной дискуссии ты судишь исключительно по себе. А мой и Василиска поинт в том, что такая конструкция запутывает. Пускай не профи с 20-летним стажем, а неофитов. Но все же. Зачем делать ловушку на ровном месте? Тем более в языке с ручным управлением памятью, где нужно понимать, чем отличается объект от структуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 10:46:20 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Василий 2, Ты сейчас договоришься до того, что используемый инструмент нужно знать и уметь. Офигеть же требования, правда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 11:02:38 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
В новой версии Delphi нас ждут Managed Records с конструкторами, конструкторами копирования и деструкторами (которые будут вызываться автоматически), так что будет ещё веселее: https://blog.marcocantu.com/blog/2018-november-custom-managed-records-delphi.html Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 11:08:25 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
zedxxx, Это, кстати, обещали сделать ещё в Delphi 2009. С тех пор ждём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 11:12:49 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
В 10.4 уже вроде как точно будет. Осталось месяц-другой подождать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 11:15:08 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
zedxxx, Да я верю. Не случилось в 10.3, случится в 10.4 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 11:20:54 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Ты сейчас договоришься до того, что используемый инструмент нужно знать и уметь. Офигеть же требования, правда? Ой, ну вот давай не утрировать. Как будто очень весело на каждой строчке кода прыгать к объявлениям или ждать хинтов, чтобы выяснить, где какой тип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 14:16:31 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Василий 2 Как будто очень весело на каждой строчке кода прыгать к объявлениям или ждать хинтов, чтобы выяснить, где какой тип. Вопрос в том, насколько часто ты не знаешь, где и какой тип. А также в том, для чего тебе это знать. У ТС путаница произошла не от незнания, а от того, что вместо вызова метода предназначенного для освобождения объекта, он пользуется костылём FreeAndNil. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 14:34:06 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
zedxxx В новой версии Delphi нас ждут Managed Records с конструкторами, конструкторами копирования и деструкторами (которые будут вызываться автоматически), так что будет ещё веселее: https://blog.marcocantu.com/blog/2018-november-custom-managed-records-delphi.html Код: pascal 1. 2. 3. 4. 5. 6. 7. Можно ожидать появления библиотек с упрощенным автоматическим управлением памятью. Вышел из scope -> зовется деструктор. Без старого фокуса с кривыми дельфийскими интерфейсами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 15:15:38 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Вопрос в том, насколько часто ты не знаешь, где и какой тип. А также в том, для чего тебе это знать. У ТС путаница произошла не от незнания, а от того, что вместо вызова метода предназначенного для освобождения объекта, он пользуется костылём FreeAndNil. В своем коде - знаю. В чужом - да как повезет. Для чего знать? А чтобы понимать, как его вообще применять. А вот насчет FreeAndNil это ты очень зря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 16:47:31 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
FreeAndNil для массива - это дурдом. У меня по опыту даже Finalise(arr) иногда проблемы вызывал. А вот Setlength(arr,0) работает надежно и предсказуемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 17:01:00 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Василий 2 А чтобы понимать, как его вообще применять. Чтобы понимать, как применять - читаешь доку, смотришь декларацию... и всё сразу видно. Никакой путаницы. Василий 2 А вот насчет FreeAndNil это ты очень зря. FreeAndNil не просто костыль, а опасный костыль. Что данный топик неиллюзорно символизирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 17:11:22 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
rgreat А вот Setlength(arr,0) работает надежно и предсказуемо. Ещё можно писать: Код: pascal 1. но ни это, ни SetLength особого смысла не несут, т.к. массив и так будет автоматически уничтожен при выходе из области видимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 17:16:15 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
zedxxx, Понятное дело. Да и Setlengh нужен только в момент обнуления перед повторным использованием массива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 17:17:47 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
rgreat У меня по опыту даже Finalise(arr) иногда проблемы вызывал. Кровавые подробности? Так-то Finalize и SetLength(..., 0) сводятся к вызову одних и тех же процедур. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 17:18:22 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Кровавые подробности? При смене на SetLength(x,0) проблема прошла. Код был не мой, и разбираться было в лом. Дело было минимум лет 10 назад. С тех пор Finalize я не пользую принципиально. Хотя и раньше не понимал его смысла в применении к массиву. Так-то Finalize и SetLength(..., 0) сводятся к вызову одних и тех же процедур.А вот как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 17:20:36 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Если верить интернету , динамические массивы введены в обджект паскаль, чтобы народ не мучился с выделением памяти. Так нет, теперь им еще конструкторы/деструкторы подавай :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2020, 17:52:47 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
zedxxx но ни это, ни SetLength особого смысла не несут, т.к. массив и так будет автоматически уничтожен при выходе из области видимости. Ага, если вы объявляете в локальных переменных какой-нибудь управляемый тип, вроде string или array of ... , то это автоматически добавляет неявный try - finally. Это надо иметь в виду, когда пишите функции, которые планируете вызывать много раз в цикле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2020, 09:26:38 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey FreeAndNil не просто костыль, а опасный костыль. Что данный топик неиллюзорно символизирует. Что тут еще сказать... разве что вспомнить пословицу "Сдуру можно и х.. сломать" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2020, 09:52:00 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey FreeAndNil не просто костыль, а опасный костыль. Что данный топик неиллюзорно символизирует. Ну да - "убивает пуля, а не человек". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2020, 09:56:28 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
alekcvp если вы объявляете в локальных переменных какой-нибудь управляемый тип, вроде string или array of ... , то это автоматически добавляет неявный try - finally. Это надо иметь в виду, когда пишите функции, которые планируете вызывать много раз в цикле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2020, 10:00:41 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
wadman Ну да - "убивает пуля, а не человек". Зри в корень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2020, 10:24:57 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey FreeAndNil не просто костыль, а опасный костыль. Что данный топик неиллюзорно символизирует. http://docwiki.embarcadero.com/Libraries/Rio/en/System.SysUtils.FreeAndNil То, что FreeAndNil не ругается и позволяет использовать в качестве аргумента ссылку на массив записей (TArray<rVariables>), говорит о том, что среда считает её object reference. Наверное, это не совсем правильно, что среда позволяет такое писать: Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2020, 10:47:56 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
goldmi45, Какой, блин, обжект референс, когда там параметр нетипизированный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2020, 11:18:13 |
|
||
|
Удаление TArray вызывает ошибку, почему?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Да, параметр нетипизирован. Но в процедуре тупо приводится к объекту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2020, 11:31:23 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2038476]: |
0ms |
get settings: |
22ms |
get forum list: |
28ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
52ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
117ms |
get tp. blocked users: |
3ms |
| others: | 380ms |
| total: | 641ms |

| 0 / 0 |
