Страница: 1 |
Страница: 1 |
Вопрос: Nothing, Erase и т.д.
Добавлено: 21.01.07 15:07
Автор вопроса: ENIX | ICQ: 238819245
Здраствуйте форумчане, я новичок и задался вопросом про эти "слова" - Nothing и Erase. Я примерно знаю что они делают, но вопрос в том предназначены ли они для "очистки памяти" от "ненужных" уже классов и масcивов.
Вариант рассматриваем когда они обьявлены внутри процедуры и как паблик; в случае к примеру когда переменной определенного класса директивой Set я передаю ссылку, что в этом случае делает Nothing и есть ли смысл использовать?
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Алексей
black admin
ICQ: 261779681
Вопросов: 87
Ответов: 633
Web-сайт:
Профиль | | #1
Добавлено: 21.01.07 16:38
Зарезервированное слово Nothing представляет значение по умолчанию любого типа данных. Присваивание переменной зарезервированного слова Nothing устанавливает для нее значение по умолчанию для типа, с которым она была объявлена. Если тип содержит члены-переменные, то для них устанавливаются соответствующие значения по умолчанию. Это показано в следующем примере:
Public Name As String
Public Number As Short
End Structure
Dim S As MyStruct, I As Integer, B As Boolean
S = Nothing ' Sets S.Name to Nothing, S.Number to 0.
I = Nothing ' Sets I to 0.
B = Nothing ' Sets B to False.
Если переменная является ссылочным типом — то есть представляет собой объектную переменную — то Nothing означает, что переменная не связана с каким-либо объектом. Например:
MyObject = Nothing ' No object currently referred to.
При присвоении объектной переменной значения Nothing она перестает указывать на какой-либо экземпляр объекта. Если в переменной содержалась ссылка на экземпляр, то установка для нее значения Nothing не приводит к удалению самого экземпляра. Удаление экземпляра и освобождение связанных с ним ресурсов памяти и системы производится только после обнаружения сборщиком мусора отсутствия активных ссылок на экземпляр.
Оператор Erase
Используется для удаления переменных типа «массив» и высвобождения памяти, отведенной под их элементы.
Элементы
arraylist
Обязательный. Список удаляемых переменных типа «массив». Несколько переменных разделяются запятыми.
Примечания
Оператор Erase может присутствовать только на уровне процедур. Это означает, что удалять переменные типа «массив» можно внутри процедуры, но не на уровне класса или модуля.
Оператор Erase эквивалентен по своему действию присваиванию значения Nothing каждой из переменных типа «массив».
Пример
В этом примере показано использование оператора Erase для удаления двух массивов и высвобождения использовавшейся ими памяти (1000 и 100 элементов, соответственно). Затем с помощью оператора ReDim трехмерному массиву присваивается новый экземпляр массива.
' ...
Erase Int3DArray, Int2DArray
' ...
ReDim Int3DArray(4, 4, 9)
Номер ответа: 2
Автор ответа:
ENIX
ICQ: 238819245
Вопросов: 9
Ответов: 76
Профиль | | #2
Добавлено: 21.01.07 16:46
Спасибо стало ясно:
Nothing - используется для сброса в дефолт, уничтожение ссылки на экземпляр. В случае обьявления переменной внутри sub, function и т.д. и передачей ссылки на экземпляр использование Nothing в качестве "для освобождения памяти" не нужно, в случае с паблик почти аналогично.
Erase - остается в обоих случаях 1) сброс масива 2) освобождение памяти
Спасиб...
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 22.01.07 15:08
Nothing чаще используется для проверки объектной переменной.
Номер ответа: 4
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #4
Добавлено: 23.01.07 21:24
Эт где ж ты такое видел?
Private Type MyStruct
Name As String
Number As Integer
End Type
Dim a as MyStruct
a=nothing' Invalid use of object