powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача TStringList по ссылке
7 сообщений из 7, страница 1 из 1
Передача TStringList по ссылке
    #40084368
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня,

с точки зрения операций в памяти:

procedure foo(s: Tstrings);
и
procedure foo(var s: TStrings);

одно и то же или всетаки нет?
в обоих случаях происходит передача по ссылке но.
Сегодня случайно столкнулся с одним утверждением :
xabr.... если в функцию передается переменная (а точнее экземпляр объекта) TStringList, то в данном случае произойдет передача по ссылке (даже если это не указано явно). Этот способ передачи является у большинства самым излюбленным, но в тоже время является и самым не практичным, т.к. для выполнения метода выделяется дополнительная память для создания точной копией передаваемой переменой. Для решения этой проблемы следует использовать один из способов описанных ниже.
.....


т.е. если передать с явным указанием var то этого не произойдёт?
что то тут я недопонимаю или автор что то напутал.

Спасибо
...
Рейтинг: 0 / 0
Передача TStringList по ссылке
    #40084369
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для новичков обычно является большим сюрпризом то, что в Дельфи переменные типа TObject и
иже с ним - указатели. Ведь они не читают документацию о внутреннем представлении типов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача TStringList по ссылке
    #40084370
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
Всем доброго дня,

с точки зрения операций в памяти:

procedure foo(s: Tstrings);
и
procedure foo(var s: TStrings);

одно и то же или всетаки нет?
в обоих случаях происходит передача по ссылке но.
Сегодня случайно столкнулся с одним утверждением :
xabr.... если в функцию передается переменная (а точнее экземпляр объекта) TStringList, то в данном случае произойдет передача по ссылке (даже если это не указано явно). Этот способ передачи является у большинства самым излюбленным, но в тоже время является и самым не практичным, т.к. для выполнения метода выделяется дополнительная память для создания точной копией передаваемой переменой. Для решения этой проблемы следует использовать один из способов описанных ниже.
.....


т.е. если передать с явным указанием var то этого не произойдёт?
что то тут я недопонимаю или автор что то напутал.

Спасибо

Любой экземляр класса - это, по сути, ссылка ( SizeOf(MyStrings)=SizeOf(pointer)).
В случае foo(Strings:TStrings) будет создана копия этой ссылки, доп. память = 4 или 8 байт,
В случае foo(var Strings:TStrings) будет создан указатель на ссылку Strings, расход памяти такой-же.
Сам Strings не клонируется в случае foo(Strings:TStrings).
Где Вы прочли эти сведения?
...
Рейтинг: 0 / 0
Передача TStringList по ссылке
    #40084371
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
что то тут я недопонимаю или автор что то напутал

Автор с текстом перемудрил. Говорит о передачи строки, отвлекается на объекты, и продолжает говорить о строке.
...
Рейтинг: 0 / 0
Передача TStringList по ссылке
    #40084372
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
с точки зрения операций в памяти:

procedure foo(s: Tstrings);
и
procedure foo(var s: TStrings);

одно и то же или всетаки нет?

Нет. В первом случае передаётся указатель (значение выражения типа TStrings), а во втором - указатель на указатель (адрес переменной типа TStrings).

Однако, с точки зрения ресурсов эти случаи довольно похожи. То есть "копирования большого списка" не происходит ни там, ни там, дополнительной памяти не выделяется ни там, ни там.

hlopotun
xabr

Выкиньте неграмотный бред и учитесь сразу его закрывать. Судя по тому, как написан текст, автор сам не особо понимает происходящее.
...
Рейтинг: 0 / 0
Передача TStringList по ссылке
    #40084373
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на хабре одни питарасы! ©
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача TStringList по ссылке
    #40084506
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
на хабре одни питарасы! ©

Не только на хабре ;)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача TStringList по ссылке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]