![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по указателям
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]как все жестоко...