лекция 13 (1161108), страница 2
Текст из файла (страница 2)
Java - Super();
В языке Delphi немного другой синтаксис. Есть специальные ключевые слова constructor и destructor. Как правило, их называют Create и Free соответственно (сделано это по примеру объекта TObject).
Нет умолчания, т.к. все явно.
i:X;
i := X.Create(..);
i.Free;
Inherited имя метода - вызов родительского метода(конструктор и деструктор, соблюдая порядок).
Т.к. нет множественного наследования.
С деструкторами всё тоже просто - есть только обычные деструкторы (деструкторы умолчания есть только в Си++!). Явный вызов в Delphi - i.Free .
В языке Java есть защищенный метод void finalize() {...} - вызывается тогда, когда объект уходит из памяти, когда его уничтожает сборщик мусора. Объект удаляется из памяти, когда не хватает места, но он может быть и не удален--> гарантировать время освобождения объекта нельзя.
Идеологически работы с ресурсами в Си++:
Конструктор - захват ресурса, деструктор - освобождение ресурса. И каждому ресурсу ставится в соответствие какой-то класс.
смена курсора на песочные часы:
{
CWaitCursor c;// смена курсора с помощью конструктора и деструктора
long op
}
Java и Cи#
try {
...
} finally
{
.. // здесь код будет выполнен в любом случае, даже если в блоке try произошло исключение
}
Т.е.
try {
X = захват
} finally {
if (X != null)
X.Dispose();
}
C# IDisposable Dispose();- вызывается, если ресурс надо освободить, ибо деструктор может быть и не вызван.
using (инициализация объекта - выражение - захват ресурса: X = new XX())
{
блок: эквивалентно
try {X = new XX();
...
} finally {
if (X != null) X.Dispose;
}
}- гарантирует, что объект будет освобожден.
7