Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];
ВнизКопируется ли элемент массива запись при присвоении? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.023 c