![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование типа record [D6]
Vlad2 © (2002-08-22 06:53:00)Здравствуйте !
Подскажите, пожалуйста, кто знает, как создать объект типа record. Что-то не нашел ни в Help, ни в faq.
Необходимо работать с массивом объектов типа record, но как его
создать ? И как уничтожить ?
Dick (2002-08-22 21:28:00) [1]To Vlad2 >> TList удобно использовать когда требуется вставить элемент в список.
to Dmitry W. Polschanoff -
Ни разу не получал GPF(To Vlad2 >> General protection failure) при работе с динамическим массивом.
Vlad2 (2002-08-22 10:55:00) [2]to Dmitry W. Polschanoff
Разъясните, пожалуйста, что есть
>"скозящий" GPF
(global pointer failure ?)
Dmitry W. Polschanoff (2002-08-22 10:43:00) [3]To MBo
> динамическому массиву надо явно выделять память вызовом
>
> SetLength, можно обойтись и без ^
> var ar:array of myrec;
> setlength(ar,10);
>ar[0].a:=3;
Реализация динамических массивов в делфи оставляет желать лучшего. Причем начиная во всех версиях, в которых она есть.
Ошибка настолько серьезная, что запросто можно получить
"скозящий" GPF. И режим Debug"а не поможет - показывает вываливание в различных (заведомо правильных) точках программы.
Vlad2 (2002-08-22 09:32:00) [4]to Digitman
Так и есть, т.е. "Речь о сколь-либо заметном выигрыше может идти лишь тогда, ...", - размер динамического массива по жизни меняется, но не часто.
to Anatoly Podgoretsky
Прекрасная мысль, пратика - критерий истины.
Одноко, кажется, с большой уверенностью можно сказать, что TList - более правильное решение.
Anatoly Podgoretsky (2002-08-22 09:23:00) [5]Если статический массив то то сотню миллисекунд на миллион обращений, по сравнению с динамическим или TList.
Почему бы не измерить время на большом цикле.
Digitman (2002-08-22 09:18:00) [6]>Vlad2
Не думаю, что выигрыш будет ощутимым. Речь о сколь-либо заметном выигрыше может идти лишь тогда, когда размера твоего массива записей не планируется динамически перераспределять в run-time (т.е. распределяется однократно)
Vlad2 (2002-08-22 09:10:00) [7]to Digitman
Точно. Всё равно, где-то этот модуль будет будет подключён в
мой Application. Тогда вопрос: верно ли, что использование record
даст выигрыш в скорости обработки (record contra TList) ?
Digitman (2002-08-22 09:00:00) [8]>Vlad2
> У меня мания - использовать макс. простые структуры
Если ты подключил (осознанно, по каким-либо иным причинам) модуль classes.pas, нет смысла отказываться от удовольствия воспользоваться тем же TList, ибо неиспользуемый тобой код его все равно "мертвым грузом" тем или иным образом будет включен в АП твоего процесса как неотъемлемый фрагмент подключенного тобой модуля
Vlad2 (2002-08-22 07:50:00) [9]to Mbo
Отлично !
Надеюсь, и я Вам "когда нибудь пригожусь" (из сказки). Спасибо.
MBo (2002-08-22 07:42:00) [10]динамическому массиву надо явно выделять память вызовом SetLength, можно обойтись и без ^
var ar:array of myrec;
setlength(ar,10);
ar[0].a:=3;
Vlad2 (2002-08-22 07:33:00) [11]to Mbo
У меня мания - использовать макс. простые структуры.
TList содержит методы, которые мне не нужны.
Необходима конструкция (не говорю "объект", следуя Вашему разъяснению), которая только хранит данные, и доступ с элементу хранилища по индексу. Насколько я понял, при работе с record
опасность только в некорректных индексах.
MBo (2002-08-22 07:24:00) [12]>Vlad2
>есть объект типа class, объект типа Integer,
в житейском смысле все можно назвать объектами, но в Object Pascal объект - специальный тип, напоминающий записи с методами (процедурами и функциями), скрытием полей, и вся работа с ним ведется только с помощью указательной технологии (обычно объектом назвают экземпляр класса, он является указателем, но ^-синтаксис к нему не нужно применять, это делается автоматически).
Про это нужно, конечно, читать.
>recarray=array[1..10] of myrec;
>// заменю на recarray=array of myrec;
>// т.к. размер массива неизвестен
какая стоит задача?
обрати внимание на списки (TList)
Vlad2 (2002-08-22 07:18:00) [13]Вдогонку to Mbo:
А почему Вы пишете "Record- не объект" ?
Я так понимаю, что есть объект типа class, объект типа Integer,
объект типа record, объект типа Interface. Существуют лишь
различия в правилах работы с ними и использовании памяти. Или нет ?
Vlad2 (2002-08-22 07:13:00) [14]to MBo
О! то, что надо.
Сейчас проверю работу с динамическим массивом:
// from Mbo
type precarray=^recarray;
recarray=array[1..10] of myrec;
// заменю на recarray=array of myrec;
// т.к. размер массива неизвестен
var p:precarray;
new(p);
p^[1].a:=3;
delete(p);
//
Значит, я невнимательно читал Help. Спасибо.
gek (2002-08-22 07:01:00) [15]type
TRecRaport = class(TObject)
private
{ Private declarations }
public
{ Public declarations }
s:string;
k:word;
z:real;
..........
a:char;
end;
var
Ra:TRecRaport;
begin
Ra:=TRecRaport.Create;
.............
..............
Ra.Free;
MBo (2002-08-22 07:00:00) [16]Record- не объект
type myrec=record
a:integer;
b:integer
end;
var ar:array[1..10] of myrec;
если надо динамически создавать:
type precarray=^recarray;
recarray=array[1..10] of myrec;
var p:precarray;
new(p);
p^[1].a:=3;
delete(p);