Destructor (модуль)
 
Задает выполнение процедуры при завершении программы

Синтаксис

[Public | Private] Sub identifier [Alias "external_identifier"] [()] Destructor [priority] [Static]
{ тело процедуры }
End Sub

Описание

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

Процедура должна иметь пустой список параметров. Ошибка времени компиляции будет создана, если процедура Destructor имеет один или несколько параметров. В наборе перегруженных процедур, только один (1) деструктор может быть определен в связи с неоднозначностью наличия нескольких процедур, которые не имеют аргументов.

В одном модуле, деструкторы обычно выполняются в том порядке, в котором они определены.

Атрибут priority, представляет собой целое число от 101 до 65535, используемое для того, чтобы заставить деструкторы выполняться в определенном порядке. Значение priority не имеет конкретный смысл, только отношения числа с другими приоритетами деструкторов. 101 это самый низкий приоритет и выполняется последним. Все деструкторы, имеющие атрибут priority выполняются после деструкторов, не имеющих атрибута. Значение приоритета 65535 такое же, как если бы мы не присваивали значение приоритета.

Модуль может определить несколько процедур деструктора. Процедуры деструкторы могут также появиться в более чем в одном модуле. Все процедуры, определенные с синтаксисом, показанном выше будут добавлены в список процедур, которые можно вызвать во время завершения программы.

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

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

Пример

Sub pauseonexit Destructor
    
    '' Если программа достигает конца или прерывается с ошибкой, 
    '' этот деструктор будет запущен перед закрытием
    
    Print "Press any key to end the program..."
    Sleep
    
End Sub

Dim array(0 To 10, 0 To 10) As Integer
Dim As Integer i = 0, j = 11

'' следующая строка вызовет в программе ошибку, и прервет ее
'' если при компиляции вы указали включение проверки границ массива (fbc -exx ...)
Print array(i, j)


Отличия от QB

  • Новое в FreeBASIC

См. также