Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/30: Рейтинг темы: голосов - 30, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 28.09.2007
Сообщений: 285

Зачем объектной переменной Nothing

10.10.2007, 14:34. Показов 5981. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Зачем использовать уничтожение ресурсов объектной переменной с помощью присвоения ей Nothing , если и так по истечении времени ее жизни ( в конце процедуры или работы приложения) они автоматом освобождаются, ведь для остальных переменных перед выходом из функции мы ничего специально не предпринимаем?
Или, - все таки не освобождаются ресурсы при окончании жизни объектной переменной, например, какие-нибудь кэши у Database ... ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.10.2007, 14:34
Ответы с готовыми решениями:

Узнать свойства и методы объекта в объектной переменной
Как программе (подчернкиваю не мне а программе), узнать, какие свойства и методы есть у класса, ссылка на экземпляр, которого хранится в...

Передача объектной переменной в процедуре
Здравствуйте! Описание проблемы. Создан модуль класса (Class1): Private a% Private Sub Class_Initialize() a = 0 End Sub ...

Как проверить состояние объектной переменной?
Есть объектная переменная Dim CommButton As MSForms.CommandButton Мне необходимо изменить определенное значение, если If CommButton...

3
2 / 2 / 1
Регистрация: 07.05.2007
Сообщений: 126
10.10.2007, 16:07
Значение Nothing импользуется в объектных пеерменных и указывает на то что объектная переменная не инициализирована.
Используется в том случае если необходимо разьеденить о.пер и обьект.
ПР:
Visual Basic
1
2
3
4
5
6
Set ExcelSheet = CreateObject('Excel.Application')
ExcelSheet.Visible = True
Set ExcelSheet = Nothing 'разьеденяет о.пер и обьект.
 
Set ExcelSheet = CreateObject('Word.Document')
ExcelSheet.Application.Visible = True
1
0 / 0 / 0
Регистрация: 17.08.2007
Сообщений: 539
10.10.2007, 18:01
Ты прав насчет времени жизни. Они все равно все потом сдохнут, когда твою программу закроют Это просто такой стиль написания программы. Ты явно указываешь другому, кто читает твой код (это может быть и не человек вовсе), что эта переменная освобожена. Ведь объектная переменная - это всего лишь адрес объекта. Если на него никто больше не указывает, что ему делать в памяти? Вот его сборщики мусора и уничтожают. Им за это зарплату платят, а не тебе А теперь представь, что кто-то сделал Recordset на 2М и на него указал в глобальной переменной (плохой стиль). Работу с этим Recordset'ом давно закончил и о глобальной переменной забыл. Вот и висит этот объект в памяти, тормоз ставит.
Насчет кэшей ничего не скажу. JET шуршит незаметно, его целая банда оптимизировала.

Удачи.
0
1 / 1 / 0
Регистрация: 28.09.2007
Сообщений: 285
10.10.2007, 19:38  [ТС]
Итак,если можно, функции у Nothing получается две:
1) Пометка некоторой объектной переменной (как ссылки на объект), что она
более не занята и это каким-то образом м.б. использовано в программе.Честно
говоря, я об этом как-то подзабыл, да и волновало второе.
2) Освобождение ресурсов,занимаемым объектом путем насильственного (не
дожидаясь умирания ссылок на него) его уничтожения присвоением последней
ссылке на него Nothing (ну, предполагается, мы отследили,что все др. ссылки
на него уже убиты).
Вот здесь смысл Nothing для меня ускользает. Ведь, если я хочу сам без VB
заботиться о свободе памяти, то нужно понимать , что это в даной точке
актуально, т.е., а нужно ли в данной точке проги мне освобождать память , но
тогда как (с помощью каких критериев) оценить эту необходимость - неясно!
Так нельзя ли просто не заботиться об этом (не испещряя все свои функции в
программе Set ObjVar=Nothing ) а предоставить освобождение всех ресурсов
самому VB, пусть возвращает память в кучу сам по мере умирания
сответствующих объектных переменных. Потому, что при ином подходе необходимо
всю программу , в каждой функции перепрошить упомянутыми Set ObjVar=Nothing
, это утомляет , да и забивает предметный смысл кода.
И еще. Вопрос - то, вообще говоря, был вызван моей неуверенностью (Help
попутал , в нем везде в примерах при окончании работы с объектом стоит Set
ObjVar=Nothing), возвратит ли VB память из-под объекта в кучу после выхода
из процедуры и соответственнно, умирания локальной ссылки на него
(считается, что cсылка одна была) - а как это проверить (посмотреть
свободный объем кучи) , я кстати - не знаю, Если , кто знает - подскажите !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2007, 19:38
Помогаю со студенческими работами здесь

Как использовать методы подкласса из объектной переменной суперкласса
FuncClass - это супер класс DatabaseClass - подкласс FuncClass fff = new FuncClass(this); fff = new DatabaseClass(this); fff....

Зачем переменной задавать значение при объявлении?
Всем добрый вечер! Хотелось бы у Вас спросить, дело такое: я пишу векторный редактор, и мне необходима ваша помощь, вот в этой строчке:...

Зачем присваивать переменной $salt пустое значение?
В качестве примера возьму обычный метод, который генерирует соль для пароля(скопипастил с какого то сайта).. Вопрос заключается в...

Зачем нужно явно указывать тип переменной?
Всем привет! Объясните зачем нужно явно указывать тип переменной? Например в С++ это обязательно, а php нет. Просто говорят что не...

Зачем присваивать переменной disc ноль? Объясните пожалуйста
Зачем присваивать disc = 0 (см. 9 строчку кода: double oplata, disc=0; Препод говорит что нужен, интуиция и опыт что нет. Где я не прав?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru