![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Копируется ли элемент массива запись при присвоении?
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), то при
> простом присвоении копия строки не создаётся
Не создается. Да она и не нужна при "простом присвоении".