| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование, связанное с MS Office > Set {Object} = Nothing |
| Автор: ИгнатьевАлексей 23.12.2007, 11:11 | ||
| Друзья! Подскажите, зачем в конце проги присваювают значение Nothing объекту? Вот, например, в таком случае:
Пишу Set applAcad = Nothing автоматом, а зачем это - не понимаю. |
| Автор: Naghual 24.12.2007, 00:12 |
| Не все так просто... Совсем не Так все Просто... |
| Автор: ИгнатьевАлексей 24.12.2007, 10:07 | ||||
| Akina, можно я напишу фразу, а вы, мастер, скажете - правильно я рассуждаю, или нет... Можно? В начале текста программы я написал:
в конце
Это значит, что при выполнении, программа в точке Dim a As Boolean выделила свободную память под переменную a, а в точке End Sub освободила эту память. Это присуще языкам высокого уровня. Так или нет? Скажите, плз. |
| Автор: Akina 24.12.2007, 10:24 |
Так. Однако переменная - это на 100% внутреннее дело программы, и она гарантированно будет очищена правильно. Совсем другое дело - объект. Его создали и дергали за разные выступающие части, а он в свою очередь тоже куда-то лазил, где-то что-то у кого-то просил... и если его прибить, то вовсе не факт, что запрошенные им для выполнения затребованных операций ресурсы будут отпущены, очищены и закрыты правильно при неявном закрытии. Особенно это относится к асинхронным операциям в многомодульных проектах. Garbage Collection хоть и написан хорошо, но всех случаев предусмотреть не в силах. Простейший пример: вызовите любой СОМ-объект (скажем, Excel.Application), закройте его... а СОМ-сервер останется висеть в памяти. Впрочем, пример не корректен, ибо не та причина - но смысл его приблизительно тот же. В общем, это такой же признак "правильного" программирования, как, например, явная декларация всех переменных в определенный (не Variant - когда это возможно, конечно) тип или, например, не-использование goto... |
| Автор: ИгнатьевАлексей 24.12.2007, 10:38 |
| Akina, огромное спасибо за обстоятельное разъяснение! Таким образом, для каждого Set (что-то) As (какой то объект) следует в конце поставить Set (что-то) = Nothing. Включая и объект Range. Правильно? |
| Автор: Akina 24.12.2007, 12:28 |
| Хуже. Для каждого типа объекта следует использовать свои заморочки. Например Recordset перед явным =Nothing надо столь же явно .Close... |
| Автор: ИгнатьевАлексей 24.12.2007, 13:44 |
| Akina, понял..... Никто ведь и не говорил, собственно, что программист-простая профессия... |