Продолжительность жизни объектов

Программирование на Visual Basic for Applications
Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Продолжительность жизни объектов

Сообщение Avtopic » 29.03.2007 (Чт) 16:38

Здравствуйте!

Имею класс cL_AppOperation
Во время работы одновременно созданы много объектов этого класса.

Вот когда
1. Set Perem = New cL_AppOperation
в этом место происходит Class_Initialize

в конце уничтожаем его.
Set Perem = Nothing
в этом место происходит Class_Terminate
Здесь все понятно.


Когда пишем
2. Private Perem As New cL_AppOperation или Dim Perem As New cL_AppOperation

Class_Initialize наступает в момент первого обращения к нему,
допустим
Perem.свойство = ...

Вопрос такой, когда же этот Perem уничтожается?
Точно также как обычные переменные?
или здесь тоже, где ни будь нужно писать Set Perem = Nothing.
Во всяком случае, без последнего, Class_Terminate не наступает никогда.
Или Class_Terminate только для меня, для случая явного уничтожения, и реально при выходе из процедуры уничтожение происходит.
меня не интересует сам Class_Terminate, просто интересно при End Sub происходит или нет полноценное уничтожение Perem, освобождение от него ресурсов компьютера.
Если кто не будь, не поленится и чуть больше слов скажет обо всем этом или где прочитать про это именно в этом контексте, буду очень благодарен.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.03.2007 (Чт) 16:44

Слово private в объявлении переменной показывает, что она уровня модуля. Было бы странно, если бы такая переменная уничтожалась сама, потому что область её видимости никогда не заканчивается.
Автору изучить азы, не в плане работы с классами, про классы можно забыть, а вообще, по теме "время жизни переменных".
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 29.03.2007 (Чт) 17:15

Код: Выделить всё
Sub nnn()
Dim Perem As New cL_AppOperation
Perem.ShowMode = EditOld

'Set Perem = Nothing

End Sub


Видимость этой переменной заканчивается?
почему не инициируется Class_Terminate без Set Perem = Nothing.
Еще раз скажу, что не интересует Class_Terminate, может также не происходит освобождение памяти.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 30.03.2007 (Пт) 7:21

Видимость этой переменной это одно, а существование объекта это совсем другое. Class_Terminate выполняется, когда последняя ссылка на объект будет установлена в Nothing. Возможно даже неявным образом.
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 84

    TopList