Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.14;
Скачать: CL | DM;

Вниз

Копируется ли элемент массива запись при присвоении?   Найти похожие ветки 

 
TStas   (2010-08-16 21:10) [0]

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

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

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


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


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


Есть.


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


Есть.

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


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


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

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


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

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


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


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

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


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


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


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


 
Palladin ©   (2010-08-17 05:04) [6]


> Если я пишу 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;


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



Страницы: 1 вся ветка

Текущий архив: 2010.11.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
15-1280868339
Медвежонок Пятачок
2010-08-04 00:45
2010.11.14
php, json_encode


2-1282080138
подмастерье
2010-08-18 01:22
2010.11.14
Изменение свойств формы


15-1280694604
Юрий
2010-08-02 00:30
2010.11.14
С днем рождения ! 2 августа 2010 понедельник


15-1281080893
Knight
2010-08-06 11:48
2010.11.14
Как сделать быструю загрузку файла для просмотра?


2-1279196387
PinDOS
2010-07-15 16:19
2010.11.14
Динамический список