Destructor
 
Вызывается автоматически, когда класс или определяемый пользователем тип выходит из области или уничтожен

Синтаксис

Type typename
field declarations
Declare Destructor ( )
End Type

Destructor typename ( )
statements
End Destructor

Параметры

typename
Имя Type , Class

Описание

Метод деструктора вызывается, когда определяемая пользователем переменная 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

  • Новое в FreeBASIC

См. также