Re: время жизни
От: Demiurg  
Дата: 18.03.03 15:02
Оценка: 3 (1)
Здравствуйте, delphi_teapot, Вы писали:

DT>Многоуважаемые дельфи-гуру, помогите!

DT>Страдаю второй год! Никак не пойму (все мои друзья-гуру не могут мне объяснить).
DT>Слыхал от людей, что все объекты в обжект паскале динамические.
DT>1. Когда объект (т.е. указатель) выходит за пределы видимости, то уничтожается ли объект? Или я обязан явно вызвать деструктор?
DT>2. Cтало быть, все объекты в куче?
DT>3. Если есть два динамических массива А и В, то A:=B; приводит к освобождению памяти, на которую до этого ссылался А?
DT>Помогите!

Здесь нет ничего сложного. Если ты создал объект (вызвав его конструктор), то ты обязан его уничтожить. Простое объявление переменной объекта приводит просто к выделению памяти под указатель, область памяти, где будет храниться адрес настоящего объекта. При выходе из области видимости объекты не уничтожаются, уничтожаются толко динамические массивы, строки и объекты, представленные как интерфейсы.
То есть если ты вызвал конструктор, но потом забыл вызвать деструктор, объект будет существовать в течении всего времени жизни программы.
Присвоение A := B просто приводит к копированию значения адреса объекта, то две переменные теперь указывают на один объект, естественно, что ничего не освобождаются. Если потом вызвать A.Free, то вызывать B.Free будет нельзя, ибо объект уже уничтожен... Ну и так далее...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.