Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по указателям


Страницы:   1 2

Dan ©   (2008-01-11 18:27:00) 

Допустим, есть некий класс:

type
 PClass = ^TClass;
 TClass = class
 public
   Field1 : Byte;
   Field2 : Integer;
   Field3 : String;
 end;

Самый быстрый и лучший способ работы с классом этот:

...
var
   C : TClass;
 pC : PClass;
begin
 pC := @C; pC^ := TClass.Create; pC^.Field := 1;
end;
...

или этот:

...
var C : TClass;
begin
 C := TClass.Create; pC.Field := 1;
end;
...

P.S. Думаю, через указатели быстрее.


Dan   (2008-01-11 19:18:00) [1]

Ладно! Всем спасибо за ответы.


Dib@zol   (2008-01-11 19:12:00) [2]

> Значит с рекордами лучше работать через указатель? Или нет?

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

ЗЫ а если уж так хочется попробовать поработать с указателями, попробуй сгенерировать хотя бы шестнадцативершинный граф со случайными связями (макс. 4 шт. на один узел) и попытаться найти в этом графе циклический маршрут.


{RASkov}   (2008-01-11 19:12:00) [3]

Блин.... как здесь быстро отвечают :)


{RASkov}   (2008-01-11 19:12:00) [4]

> [12] WMZ   (11.01.08 19:05)

Смотря что ты с этим рекордом делать будешь.... если просто читать и/или менять его составные то нет смысла в указателях....

Указатель чем отличается от переменной не указателя (например рекорд) ?
Да, да... указатель он всегда 4 байта.... поэтому сортировка данных, например в массиве, быстрее организовать с указателями...., чем реальные, большого размера, данные перекладывать в памяти с места на место..... Вот и думай когда быстрее указатель, а когда от него нет толку....
И вообще они остались для совместимости :)


Джо   (2008-01-11 19:11:00) [5]

> [17] Dan   (11.01.08 19:09)
> Мне нужно, понять, когда лучше работать с указателями(record)
> , а когда - напрямую.

Когда нужно выделять память под запись динамически, тогда и нужно использовать указатель. Остальные случаи слишком специфичны, чтобы их тут обсуждать.


Dan   (2008-01-11 19:09:00) [6]

Мне нужно, понять, когда лучше работать с указателями(record), а когда - напрямую.


Джо   (2008-01-11 19:08:00) [7]

> [12] WMZ   (11.01.08 19:05)
>
> > Palladin ©
>
> Хорошо! Если рекорд большой(т.б. внутри присутсвуют переменный
> типа Byte, String, Integer, Double, различные массивы и
> пр.) значит через указатели, иначе - нет.
> Так?

От того, что ты заведешь указатель на что бы то ни было, быстрее ничего не станет. Откуда такие странные представления вообще?


Юрий Зотов   (2008-01-11 19:07:00) [8]

> WMZ   (11.01.08 19:05) [12]

Тоже зависит от ситуации. Размер записи сам по себе ничего не определяет.


Palladin   (2008-01-11 19:07:00) [9]


> [12] WMZ   (11.01.08 19:05)

нет не так, от размера рекорда ничего не зависит


Kolan   (2008-01-11 19:06:00) [10]

Что тебе надо сделать объясни…


WMZ   (2008-01-11 19:05:00) [11]


> Palladin ©

Хорошо! Если рекорд большой(т.б. внутри присутсвуют переменный типа Byte, String, Integer, Double, различные массивы и пр.) значит через указатели, иначе - нет.
Так?


Palladin   (2008-01-11 19:02:00) [12]

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


Dan   (2008-01-11 18:59:00) [13]


> Palladin ©

Значит с рекордами лучше работать через указатель? Или нет?


Palladin   (2008-01-11 18:55:00) [14]

нет конечно, идентификатор recordа в памяти имеет ту же структуру что и описана (хотя конечно есть различия между packed и не packed)


Правильный_Вася   (2008-01-11 18:54:00) [15]


> через попу ухо пяткойчесать всегда быстрее

это называется инкапсуляция


Dan   (2008-01-11 18:53:00) [16]

Понятно! А с рекордами та же каша?


Kolan   (2008-01-11 18:46:00) [17]

> конечно быстрее… через попу ухо пяткой чесать всегда быстрее)

И главное понятнее :)


Dib@zol   (2008-01-11 18:45:00) [18]

> конечно быстрее... через попу ухо пяткой чесать всегда быстрее)

Ну не совсем через попу, коненчно, однако чревато потерей драгоценных четырёх байт, а также одним лишним присвоением при обращении к классу. Более того, могут возникнуть трудноловимые ерроры при разыменовании. Скажем, первый поинтер ты разыменовал, и надеешься увидеть в полученной области памяти структуру класса. Пробуешь читать... И ловишь AV, ибо там не класс, а лишь второй поинтер, по которому ышшо надо лишний раз перейти.


MetalFan   (2008-01-11 18:38:00) [19]


> P.S. Думаю, через указатели быстрее.

конечно быстрее... через попу ухо пяткой чесать всегда быстрее)


Palladin   (2008-01-11 18:33:00) [20]

как все жестоко...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо