Delphi Stringlist в записи - PullRequest
       47

Delphi Stringlist в записи

3 голосов
/ 08 марта 2011

Возможно ли иметь список строк в записи?EG

TImportStats = record
  ATotal:Integer;
  BTotal:String;
  AList:TStringist;
end;

и если я предполагаю, что мне нужно будет создать его перед использованием записи?

Ответы [ 4 ]

7 голосов
/ 08 марта 2011

Хотя это совершенно законно, может быть разумно найти другой путь.Вы указываете на проблему, когда говорите:

Я предполагаю, что мне нужно создать ее перед использованием записи

Не только это, но вам нужно найти хорошее времячтобы уничтожить это тоже.Если вы забудете это сделать, ошибок не будет, но ваша программа утечет память.

Если запись является владельцем списка строк, то, возможно, лучше хранить ее внутриучебный класс.Таким образом, создание и уничтожение списка строк будет следовать шаблону конструктора / деструктора, с которым знакомы все разработчики Delphi.

Если запись не принадлежит списку строк, а просто берет на нее ссылку во времявремя жизни списка строк, то запись в порядке.Но если вы сделаете это таким образом, убедитесь, что время жизни записи содержится во времени жизни списка строк, чтобы вы не носили с собой устаревшую ссылку.

3 голосов
/ 08 марта 2011

Да, это должно работать. AList будет (не будет использоваться), пока вы не создадите список строк. Таким образом, вы можете использовать другие элементы записи, не создавая список строк, но вы должны создать элемент списка строк перед его использованием. Кроме того, вы несете ответственность за освобождение каждого списка строк, когда закончите.

0 голосов
/ 14 сентября 2011

Я знаю, что, возможно, уже поздно, но самый элегантный способ решить вашу проблему - создать подкласс TStringList с ATotal и BTotal в качестве двух новых элементов в нем. Тогда вы можете просто создать и уничтожить его так, как считаете нужным. Это простое и понятное решение.

0 голосов
/ 09 марта 2011

Если список строк будет использоваться только в локальной области видимости записи TImportStats, Возможно, вы захотите взглянуть на реализацию значения StringList в Code Central.

Это позволяет избежать попыток, создать, наконец, уничтожить накладные расходы.

...