Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];

Вниз

Переменная и ее отчистка   Найти похожие ветки 

 
KidMan   (2002-10-10 22:13) [0]

Мастера!
Использовал переменную типа SmallInt и теперь мне нужно освободить память которую она занимает... Как это сделать?
может достаточно написать переменная := 0; ?

И еще... Метод free убивает обект а каким методом можно вновь его восстановить если вдруг понадобиться?

Заранее благодарю!


 
.   (2002-10-10 22:24) [1]

1)зачем?
2)например tfilestream - myfilestream := TFileStream.Create("blabla", $FFFF);


 
Юрий Зотов   (2002-10-10 22:39) [2]

1. Переменные бывают статические и динамические. Память для первых выделяет компилятор (и ее никак не освободить, потому они так и называются), а для вторых - мы сами (и поэтому ее можно освободить).

var
// Cтатическая переменная:
StaticVar: SmallInt;
// Cтатический указатель на динамическую переменную:
PDynamicVar: ^SmallInt;

...
New(PDynamicVar); // См. также GetMem
PDynamicVar^ := 5;
Dispose(PDynamicVar); // См. также FreeMem


2. В Delphi все объекты создаются в динамической памяти.
var
MyObj: TMyObject;
...
MyObj := TMyObject.Create;
// Теперь MyObj указывает на адрес объекта в памяти.

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

MyObj.Free;
// Теперь объекта уже не существует и, хотя содержимое переменной MyObj не изменилось, оно стало некорректным.

MyObj := TMyObject.Create;
// Теперь MyObj указывает на адрес НОВОГО объекта в памяти.


3. Примите добрый совет - отложите на время объекты и научитесь свободно работать с динамической памятью и указателями. Без понимания этих вещей в Delphi (да и не только в Delphi) ничего серьезного сделать практически нельзя, можете поверить.


 
evgeg   (2002-10-10 22:49) [3]

Еще бывает автоматическая память. Память для локальных переменных и параметров в процедурах и функциях выделяется в момент вызова процедуры и освобождается при выходе.


 
.   (2002-10-10 22:51) [4]

мой скромненький вопрос для чего есть freeandnil?


 
¤NoNaMe¤   (2002-10-10 22:53) [5]

procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;

Из кода видно для чего...


 
.   (2002-10-10 23:26) [6]

¤NoNaMe¤ © (10.10.02 22:53)
>Из кода видно для чего...

видно ??? - рассказываю, что я вижу (по порядку) -
- в функцию передается нетипизированный указатель на что-то, (назову его внешним указателем)
- внутри функции определяется внутренняя переменная-указатель (на этот раз типизированный)
- выполняется присвоение локальной переменной значения внешнего указателя (с приведением типа)
- далее выполняется обнИление внешнего указателя (опять же с приведением типа)
- ну и финальный аккорд - вызов метода Фри для внутреннего указателя

А теперь вопросы:
- зачем производится резервирование значения параметра в дополнительной внутренней переменной ???
- зачем нужны все эти хитрые преобразования типов, а ???
- почему нельзя сделать так

procedure FreeAndNil(var Obj);
begin
TObject(Obj).Free;
Obj:= Nil;
end;

???


 
.   (2002-10-10 23:37) [7]

не бери мой ник =)


 
Dr_Mike   (2002-10-10 23:40) [8]

Сорри, случайно вышло (хотя вообще-то надо регистрироваться на форуме, если уж ником дорожишь)


 
Алексей Ким   (2002-10-10 23:43) [9]

да не очень я дорожу =) кому он нужен...


 
KidMan   (2002-10-12 00:31) [10]

Спасибо всем!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
14-78617
Calmterror
2002-10-01 16:16
2002.10.24
Новый форум


3-78262
DeepProg
2002-09-30 15:30
2002.10.24
Представление поля


4-78736
REA
2002-09-12 17:34
2002.10.24
Часы


7-78685
Grig
2002-08-15 15:08
2002.10.24
как сделать прогу демонстрационной


3-78244
Uran
2002-10-02 11:13
2002.10.24
Редактирование таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский