Size: a a a

2020 September 18

SB

Sergey Bodrov in Delphi & Lazarus
В современном TStringList можно хранить элементы TObject и даже указать автоосвобождение при удалении.
источник

SB

Sergey Bodrov in Delphi & Lazarus
А, пардон, вопрос был про сам список.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Не надо делать функций/методов, создающих объект и  возвращающих ссылку на него.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Это нарушает правило, что код создания и удаления объектов должен находиться максимально близко друг к другу.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Исключение для автоматически удаляемых объектов - типы IInterface, string, array, object.
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Sergey Bodrov
А, пардон, вопрос был про сам список.
Спасибо Сергей, да, про сам список, не суть важно. Понял.
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Sergey Bodrov
Исключение для автоматически удаляемых объектов - типы IInterface, string, array, object.
А с динамическими массивами? Возможно ли их использование в подобных функциях? Если функция в цикле, то при этом для массива будет выделятся новая область памяти, с сохранением старой или будет происходит перераспределение с удалением старой области (ссылок на область памяти)?
источник

SB

Sergey Bodrov in Delphi & Lazarus
Сергей Пятыгин
А с динамическими массивами? Возможно ли их использование в подобных функциях? Если функция в цикле, то при этом для массива будет выделятся новая область памяти, с сохранением старой или будет происходит перераспределение с удалением старой области (ссылок на область памяти)?
Динамический массив array of создается в момент первого обращения к переменной массива и уничтожается после последнего обращения к переменной. Если это Result функции, то будет создаваться каждый раз внутри функции при первом обращении и удаляться снаружи функции после последнего обращения или после перезаписи переменной.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Лучше передавать строки и массивы как параметр функции с модификатором var или const. Тогда они передаются "по ссылке" максимально быстро.
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Sergey Bodrov
Динамический массив array of создается в момент первого обращения к переменной массива и уничтожается после последнего обращения к переменной. Если это Result функции, то будет создаваться каждый раз внутри функции при первом обращении и удаляться снаружи функции после последнего обращения или после перезаписи переменной.
Хорошо, спасибо большое!
источник

AI

Alexander Ivanov in Delphi & Lazarus
Sergey Bodrov
Лучше передавать строки и массивы как параметр функции с модификатором var или const. Тогда они передаются "по ссылке" максимально быстро.
Сразу видно профи 👍👍👍👍
источник

VA

Viktor Akselrod in Delphi & Lazarus
Alexander Ivanov
Сразу видно профи 👍👍👍👍
сарказм? 🙂
источник

AI

Alexander Ivanov in Delphi & Lazarus
Viktor Akselrod
сарказм? 🙂
Нет. Почему ты решил? Правильное решение, так и делать надо.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Alexander Ivanov
Нет. Почему ты решил? Правильное решение, так и делать надо.
потому что они и так будут передаваться по ссылке, ибо это ссылочные типы
в данном случае модификатор может повлиять только на счетчик ссылок
источник

AI

Alexander Ivanov in Delphi & Lazarus
Viktor Akselrod
потому что они и так будут передаваться по ссылке, ибо это ссылочные типы
в данном случае модификатор может повлиять только на счетчик ссылок
Ой ли, надо глянуть в отладчике. С записями точно копируется запись без модификатора const.
источник

SB

Sergey Bodrov in Delphi & Lazarus
Viktor Akselrod
потому что они и так будут передаваться по ссылке, ибо это ссылочные типы
в данном случае модификатор может повлиять только на счетчик ссылок
А еще при передаче managed type "по значению" добавляется try и еще чего-то (проверка copy-on-write?).
источник

VA

Viktor Akselrod in Delphi & Lazarus
Alexander Ivanov
Ой ли, надо глянуть в отладчике. С записями точно копируется запись без модификатора const.
конечно. записи - это value type 🙂
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Sergey Bodrov
Лучше передавать строки и массивы как параметр функции с модификатором var или const. Тогда они передаются "по ссылке" максимально быстро.
Сергей, а Вы имеете ввиду передавать в функцию/процедуру?
источник

АВ

Александр В... in Delphi & Lazarus
Сергей, я ведь даже пример с TList кидал
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Александр В
Сергей, я ведь даже пример с TList кидал
Да Александр, спасибо, с TList/TFPGList все получилось, Ваш пример очень помог, интересовало как правильно поступить со списком/массивом в другом контексте-результата функции.
источник