Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Копируется ли элемент массива запись при присвоении?


TStas ©   (2010-08-16 21:10:00) 

Допустим есть Type TSomeRec = record ...end; //Какая-то запись
Var Ar: Array[1..10] of TSomeRec;
DynAr: Array of TSomeRec;
X: TSomeRec;

Если я пишу X := Ar[2], есть ли копирование или это только ссылка?
А если X := DynAr[2]?

Вообще, я если определяю тип запись, всегда к ней сразу пишу процедуру копирования и копирую процедурой. Точно знаю, что если у записи есть поля длинные строки (String), то при простом присвоении копия строки не создаётся.
Подскажите, а то заметил, что здесь у меня пробел в знаниях.


Palladin   (2010-08-17 05:04:00) [1]


> Если я пишу X := Ar[2], есть ли копирование или это только
> ссылка?

проверить слабо?

type
  TMyType = record
    s: String;
  end;
var
  ar: Array [1..1] of TMyType;
  bezDarnostj: Array of TMyType;
  r: TMyType;
begin
  ar[1].s := 'Нехорошее слово';
  r := ar[1];
  r.s := 'Вообще плохое слово';
  ShowMessage(#39 + r.s + #39':'#39 + ar[1].s + #39);
  SetLength(bezDarnostj, 3);
  bezDarnostj[2].s := 'Бездарность';
  r := bezDarnostj[2];
  r.s := 'Дарность не детектед';
  ShowMessage(#39 + r.s + #39':'#39 + bezDarnostj[2].s + #39);
end;


сложно конечно написать... пусть всякие паладины пишут... а мы на форуме спросим... мы-ж не чернорабочие...


Сергей М.   (2010-08-16 23:06:00) [2]


> Германн ©   (16.08.10 23:01) [4]


Ну копия-то, положим, есть. Только не копия самих данных, а копия указателя на них.


Германн   (2010-08-16 23:01:00) [3]


> То есть, если мне нужно прочитать какое-то поле записи,
> то лучше делать не X.SomeField, a Ar[2].SomeField?
>

Если речь о поле типа String, то и так и так читается одно и тоже. Т.е. в случае копии нет.


Сергей М.   (2010-08-16 22:23:00) [4]

Какая разница что читать - оригинал или копию ?


TStas   (2010-08-16 22:21:00) [5]

То есть, если мне нужно прочитать какое-то поле записи, то лучше делать не X.SomeField, a Ar[2].SomeField?


Сергей М.   (2010-08-16 21:27:00) [6]


> пишу X := Ar[2], есть ли копирование


Есть.


> А если X := DynAr[2]?


Есть.

> если у записи есть поля длинные строки (String), то при
> простом присвоении копия строки не создаётся


Не создается. Да она и не нужна при "простом присвоении".


Наверх

Титульная страница Поиск, карта сайта Написать письмо