Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
{ или
pm:= new(pmonstr, initCl. 1, 1, 1));
} '
new(pd, initd, 1, 1, 1, 1):
{или
pd:= new(pdaemon. initd, 1, 1, 1, D);
}
Для освобождения памяти, занятой объектом, применяется процедура Dispose:
Dispose(pm); При выполнении этой процедуры освобождается количество байтов, равное размеру объекта, соответствующего типу указателя. Следовательно, если на самом деле в указателе хранится ссылка на объект производного класса, который, как известно, может быть больше своего предка, часть памяти не будет помечена как свободная, но доступ к ней будет невозможен, то есть появится мусор. Второй случай появления мусора возникает при применении процедуры Dispose к объекту, поля которого являются указателями.
Для корректного освобождения памяти из-под полиморфных объектов следует использовать вместе с процедурой Dispose специальный метод — деструктор. Ему рекомендуется давать имя done, например:
destructor monstr.done:
Begin
end:
Для правильного освобождения памяти деструктор записывается вторым параметром процедуры Dispose:
Dispose(pm, done);
Это верно только для виртуальных методов.
Для простых объектов деструктор может быть пустым, а для объектов, содержащих динамические поля, в нем записываются операторы освобождения памяти для этих полей. В деструкторе можно описывать любые действия, необходимые для конкретного объекта, например закрытие файлов. Исполняемый код деструктора никогда не бывает пустым, потому что компилятор по служебному слову destructor вставляет в конец тела метода операторы получения размера объекта из VMT. Деструктор передает этот размер процедуре Dispose, и она освобождает количество памяти, соответствующее фактическому типу объекта. (Вызов деструктора вне процедуры Dispose память из-под объекта не освобождает)
Деструкторы рекомендуется делать виртуальными, чтобы при вызове всегда выполнялся деструктор, соответствующий типу объекта. Деструкторы обязательно использовать только для динамических полиморфных объектов, однако можно их применять и для статических объектов. В объекте можно определить несколько деструкторов (естественно, в этом случае они должны иметь разные имена).
ВАРИАНТ №4
1. Дано описание объектов:
type
А = object
У: integer: end:
В = object (A)
Z, Т: integer: end:
var Ы: В;
Укажите правильные способы обращения к полям объекта:
1) B.Z
2) bl.Y
3) Y.B
4) Ы.Т
5) Т.Ы
Дата публикования: 2015-10-09; Прочитано: 178 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!