Оператор New
 
Оператор динамического выделения памяти и построения данных определенного типа.

Синтаксис
Использование

result = New datatype
или
result = New datatype ( initializers, ... )
или
result = New datatype[ count ]

Параметры

size
Размер байтов для выделения.
initializers
Инициализируемые значения для переменной
datatype
Имя типа данных для создания.
count
Точное количество элементов с целью распределения.

Возвращаемое значение

Указатель типа datatype заново выделенных данных.

Описание

Оператор New динамически распределяет память и формирует указанный тип данных. Для простых типов, как целые числа, начальное значение может быть предоставлено. Для типов без конструкторов, начальные значения могут быть определены для каждого поля. Типы, которые имеют конструкторы могут иметь свои конструкторы, также вызываемые New. Если инициализаторы не даны,  будет установлено значения по умолчанию для этих типов.

New[] является версией массива оператора New и выделяет достаточно памяти для указанного количества объектов. Конструктор по умолчанию для данного типа будет использоваться заданные начальные значения для каждого элемента.

Операторы New и New[] не могут быть непосредственно использованы с String (строками), но работают с Udt , содержащими строки.

Объекты, созданные с New должны быть освобождены с Delete. Память выделяемая с New[] должна быть освобождена с Delete[], версией массива Delete. Вы не можете смешивать и сочетать различные версии операторов.

Указание начального значения Any, как в new datatype(any) будет выделять память для типа, но не инициализировать данные. Это действует только на типы данных, которые не имеют конструкторы.

Указание начального значения Any, как в new datatype[count]{any} будет выделять память для массива, но не инициализировать данные. Это действует только на типы данных, которые не имеют конструкторы.

Пример

Type Rational
    As Integer    numerator, denominator
End Type

Scope

    ' Создать и инициализировать "rational" и сохранить его адрес.
    Dim p As Rational Ptr = New Rational(3, 4)

    Print p->numerator & "/" & p->denominator

    ' Уничтожить rational и освободить память (вернуть обратно в систему). 
    Delete p

End Scope

Scope

    Выделить память для 100 integers и сохранить адрес.
    Dim p As Integer Ptr = New Integer[100]

    Присвоить некоторые значения в массив целых чисел.
    For i As Integer = 0 To 99
        p[i] = i
    Next

    ' Освободите память всего массива целых чисел.
    Delete[] p

End Scope

Различия диалектов

  • Доступно только в диалекте -lang fb.

Отличия от QB

  • Новое в FreeBASIC

См. также