Вызывается автоматически, когда класс или определяемый пользователем тип
выходит из области или уничтожен
Синтаксис
Type typename
field declarations
Declare Destructor ( )
End Type
Destructor typename ( )
statements
End Destructor
Параметры
Описание
Метод деструктора вызывается, когда определяемая пользователем переменная
Type
или
Class выходит из области или
явно разрушена с помощью оператора
Delete.
typename - это имя типа, для которого метод
Destructor
декларируется или определяется. Разрешение имен для
typename
следует тем же правилам процедуры при использовании в
Namespace.
Метод
Destructor передает скрытый параметр
This
, имеющий тот же тип
typename.
Деструктор в типе вызывается до деструкторов на любом из его полей. Поэтому,
все поля доступны со скрытым параметром
This
в теле деструктора.
Только один деструктор может быть продекларирован и определен для каждого
типа.
Поскольку заявление
End не закрывает
никаких областей видимости, деструктор объекта не будет автоматически
вызывается, если
End используется для
завершения программы.
Destructor может быть также вызван непосредственно из
typename
экземпляра, как и другие методы-элементы (
Sub)
и с тем же синтаксисом, т.е. с помощью оператора доступа к элементам,
например,
obj.Destructor(). Предполагается , что
построение объекта и всех его элементов прошло в допустимом состоянии, в
противном случае его последствия не определены и могут приводить к сбоям.
Этот синтаксис является полезным в тех случаях, где
obj был
построен вручную, например с помощью
obj.Constructor()
или
Placement New.
Пример
Type T
value As ZString * 32
Declare Constructor ( init_value As String )
Declare Destructor ()
End Type
Constructor T ( init_value As String )
value = init_value
Print "Creating: "; value
End Constructor
Destructor T ()
Print "Destroying: "; value
End Destructor
Sub MySub
Dim x As T = ("A.x")
End Sub
Dim x As T = ("main.x")
Scope
Dim x As T = ("main.scope.x")
End Scope
MySub
Вывод:
Creating: main.x
Creating: main.scope.x
Destroying: main.scope.x
Creating: A.x
Destroying: A.x
Destroying: main.x
Различия диалектов
- Объектно-связанные функции поддерживаются только в диалекте -lang fb.
Отличия от QB
См. также