Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Добавление TRecordType в TList<TRecordType> / 10 сообщений из 10, страница 1 из 1
22.05.2018, 15:57
    #39648182
_Промешан_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление TRecordType в TList<TRecordType>
Стандартная ситуация.
Есть тип:
Код: pascal
1.
2.
3.
TRecordType = 
  A,B: integer
end;


И нужно создать список, добавив эти данные:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
TRecList = TList<TRecordType>;
...

var rt: TRecordType; Lst: TRecList;
begin
  Lst := TRecList.Create;
  for i := 0 to 10
  begin
    rt.a := i * 1;
    rt.b := i * 2;
    Lst.Add(rt);
  end;
end



И вот я понимаю, что это ведь косяк - каждая запись ссылается на одно и тоже место памяти. Или все таки происходит копирование нового значения?
...
Рейтинг: 0 / 0
22.05.2018, 16:14
    #39648198
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление TRecordType в TList<TRecordType>
_Промешан_,

record скопируется...
...
Рейтинг: 0 / 0
22.05.2018, 16:19
    #39648204
_Промешан_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление TRecordType в TList<TRecordType>
zinpub_Промешан_,

record скопируется...
То есть не будет одинаковых записей?
...
Рейтинг: 0 / 0
22.05.2018, 16:21
    #39648205
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление TRecordType в TList<TRecordType>
_Промешан_,
Одинаковых, в смысле ссылающихся в одно место, не будет.
...
Рейтинг: 0 / 0
22.05.2018, 16:25
    #39648206
_Промешан_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление TRecordType в TList<TRecordType>
zinpub_Промешан_,
Одинаковых, в смысле ссылающихся в одно место, не будет.
Спасибо.
Проверил, так и есть.

Я так понимаю там где то есть проверка объект на входе или нет и в зависимости от этого происходит или создание памяти под данные или запись ссылки.
...
Рейтинг: 0 / 0
22.05.2018, 16:31
    #39648214
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление TRecordType в TList<TRecordType>
_Промешан_,

record - управляемый тип, ссылку надо ручками получать...
...
Рейтинг: 0 / 0
22.05.2018, 18:09
    #39648263
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление TRecordType в TList<TRecordType>
ну и по идее утечка. кто потом освободит память?
...
Рейтинг: 0 / 0
22.05.2018, 18:15
    #39648264
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление TRecordType в TList<TRecordType>
krapotkin,

Не идет.

Но вот доступ через "Lst[n].A:=" сделать не выйдет. Придеться целиком весь рекорд присваивать.
...
Рейтинг: 0 / 0
22.05.2018, 19:05
    #39648290
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление TRecordType в TList<TRecordType>
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
type
  TRecordType = record
  strict private
    FA: Int32;
    FB: Int32;
  public
    constructor Create(const A, B: Int32);
    property A: Int32 read FA;
    property B: Int32 read FB;
  end;

  TRecordTypeList = TList<TRecordType>;

implementation
{ TRecordType }

constructor TRecordType.Create(const A, B: Int32);
begin
  FA := A;
  FB := B;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  List: TRecordTypeList;
  i: Int32;
begin
  List := TRecordTypeList.Create();
  for i := 0 to 10 do
    // Так красивее
    List.Add(TRecordType.Create(i * 1, i * 2));
end;
...
Рейтинг: 0 / 0
22.05.2018, 19:32
    #39648300
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавление TRecordType в TList<TRecordType>
rgreatНо вот доступ через "Lst[n].A:=" сделать не выйдет. Придеться целиком весь рекорд присваивать.
Код: pascal
1.
Lst.List[n].A := ....;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Добавление TRecordType в TList<TRecordType> / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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