9.4. РЕКУРСИВНЫЕ СТРУКТУРЫ ДАННЫХ
549
па, соответствующие вставке нового элемента в начало, в конец и в середину
списка, и деструктор, который, удаляя объект, одновременно перекоммути-
рует ссылки.
Рассмотренный пример показывает, почему от тематики АТД никуда не
деться, поскольку любые чисто технологические ограничения остаются на
практике благими пожеланиями, пока они как следует не поддержаны.
Можно считать, что при помощи конструктора указателя создаются про-
сто переменные того типа, на который указывается, поскольку прагматиче-
ские функции указателей в точности те же, что и переменных. Имя перемен-
ной либо указатель на значение используется
(a) как аргумент при извлечении значения;
(b) как аргумент при обновлении значения.
Лишь в языке
Алгол 68
этот семантический и прагматический изоморфизм
был отражен и сущнсти ‘переменная’ и ‘указатель на значение’ были отожде-
ствлены. Это позволило определить общую (семантически естественную и
полезную) операцию приведения значений: разыменование. Разыменование
активизируется, как и любое приведение типов, в зависимости от синтак-
сической позиции; в частности, в левой части присваивания разыменование
происходит лишь для снятия лишних косвенных ссылок, в правой части, вну-
три выражения, оно, как правило, продолжается до получения аргумента ба-
зового типа.
В нынешних языках разыменование всегда указывается явно (какая тро-
гательная аккуратность, особенно в сопоставлении с тем, какие грубые при-
ведения производятся неявно!). Например, в языке
Pascal
для получения зна-
чения из указателя нужно написать
<имя>^
, в
C/C++/C#
—
*<имя>
.
В языках
Pascal
,
С++/C#
,
Java
для создания новых указателей с одновре-
менным отведением памяти для значения базового типа имеется оператор
new
. Практически это — инициализация переменной именно как перемен-
ной, а не значения, которое содержит соответствующая локация. Соответ-
ственно, удаление указателя вместе с именуемым значением производится
при помощи оператора
dispose
(или
delete
, в зависимости от языка). В язы-
ке
Java
) пытаются по мере возможности обойтись без явного уничтожения
указателей, заменяя это неявной сборкой мусора.
Конечно же, явное оперирование с указателями влечет (и практически
всегда на практике приводит к) нерегулярностям в структуре памяти, в част-
ности, к появлению нескольких имен у одного и того же значения, и к другим