TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Выделение памяти для динамических переменных 

             Одним из наиболее важных моментов  использования  указателей
        является распределение   динамических  переменных  в  динамически
        распределяемой области памяти. Borland Pascal предусматривает два
        способа выделения для указателя памяти: процедура New и процедура
        GetMem.

                         Использование New как процедуры

             New - это очень простая процедура.  После описания  перемен-
        ной-указателя вы  можете  вызвать  процедуру  New  для  выделения
        пространства в динамически распределяемой памяти для указываемого
        переменной элемента. Приведем пример:

             var
               IntPointer: ^Integer;
               StringPointer: ^String;

             begin
               New(IntPointer);        { выделяет в динамически распреде-
                                         ляемой области два байта }
               New(StringPointer);     { выделяет в динамически распреде-
                 .                       ляемой области 256 байт }
                 .
                 .
             end.


             Пример 8.2 Распределение динамической переменной  с  помощью
        процедуры New.

             После вызова процедуры New переменная-указатель указывает на
        память, выделенную в динамически распределяемой памяти.  В данном
        примере IntPointer указывает на двухбайтовую область,  выделенную
        процедурой New,  а IntPointer^ - это допустимая целочисленная пе-
        ременная (хотя  это  целочисленное  значение  еще не определено).
        Аналогично, StringPointer  указывает  на  выделенный  для  строки
        256-байтовый блок, а его разыменование дает доступную для исполь-
        зования строковую переменную.

                          Использование New как функции

             Кроме выделения памяти для конкретной динамической  перемен-
        ной вы  можете использовать New как функцию,  возвращающую указа-
        тель конкретного типа. Например, если PInteger - это тип, опреде-
        ленный как ^Integer, а IntPopinter имеет тип PInteger, то следую-
        щие два оператора эквивалентны:

             New(IntPointer);
             IntPointer := New(PInteger);

             Это особенно  полезно  в случаях,  когда может потребоваться
        присваивать переменной-указателю элементы различных типов. Иногда
        желательно  распределять  динамическую переменную,  не присваивая
        явно указатель конкретной переменной. Вероятно, вы можете сделать
        это только создав для процедуры и функции параметр:

             SomeProcedure(New(PointerType));

             В этом случае SomeProcedure будет добавлять передаваемый па-
        раметр к некоторому списку. В противном случае распределяемая па-
        мять будет  потеряна.  Библиотеки  Borland Turbo Vision и Borland
        Pascal широко используют этот метод для присваивания динамических
        объектов спискам.

 


                          Использование New с объектами

             Когда вы используете New как функцию или процедуру для выде-
        ления динамического объекта,  то можете  добавить  необязательный
        второй параметр,  который  задает  применяемый  для инициализации
        объекта конструктор. В Примере 8.3 первое обращение к New распре-
        деляет пространство  для объекта,  но не инициализирует этот объ-
        ект. Второй вызов выделяет память и вызывает для задания  объекта
        конструктор Init.

             type
               PMyObject = ^TMyObject;
               TMyObject = object
                  constructor Init;
               end;

             var
               MyObject, YourObject: PMyObject;
             begin
               New(MyObject);          { объект не инициализируется }
               New(YourObject, Init);  { вызов Init для инициализации
                                         объекта }

             end.

             Пример 8.3 Создание динамических объектов.

                   Примечание: Об объектах и их конструкторах рассказыва-
              ется в Главе 9 "Объектно-ориентированное программирование".




Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz