![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
:=nil; Free; Destroy [D7, WinXP]
AndrewVolkov © (2004-07-07 01:03:00)Подскажите пожалуйста в чем основные различия применительно к объектам.
В каком члучае мы делаем дестрой, фри или можно просто присвоить значение нил.
И как это сказывается на памяти - в каком случае мы ее освобождаем а в каком нет?
Спасибо
AndrewVolkov (2004-07-08 19:46:00) [1]to Amoeba
никогда с этим и не спорил. Поэтому время от времени кидаю здесь вопросы и получаю очень качественные ответы...
Amoeba (2004-07-08 11:56:00) [2]
> AndrewVolkov © (07.07.04 20:29) [30]
Видишь, насколько необходимо и полезно учить матчасть.
AndrewVolkov (2004-07-07 20:29:00) [3]Всем огроменное спасибо.
Обычно сдвигание занимало много времени, а все оказалось так просто и удобно.
и Ctrl+Shift+C. Столько удобных вещей оказывается есть, которые качественно могут съэкономить время...
evvcom (2004-07-07 10:13:00) [4]
> такая рульная штучка оказалась Ctrl+J.
А еще этот список можно редактировать: Tools > Editor Options... > Source Options > Edit Code Templates... - это для D7. В D5 было немного по другому, но тоже было.
wnew (2004-07-07 03:56:00) [5]
> AndrewVolkov © (07.07.04 02:30) [27]
> Блин, у меня сегодня какой-то день открытий.
> Ассерт - тоже оказался забойной штучкой.
>
> Ctrl+KI/Ctrl+KU
> что нажимать - одновременно K i I?
> Ctrl+Shift+C никакой реакции.
Объявляешь процедуру или функцию в классе в интерфейсной части, ставишь на неё курсор и нажимаешь Ctrl+Shift+C, в результате в части implementation появится готовая заготовка этой процедуры или функции.
Ctrl+KI/Ctrl+KU для перемещения выделенного блока текста вправо и соответственно влево. К примеру, при нажатой ALT мышью выделяешь часть текста (выделение в этом случае не построчное, а прямоугольное), после чего удерживаешь нажатой Ctrl и одновременно нажимаешь K, затем отпускаешь обе клавиши и нажимаешь I или U. В результете выделенный блок будет смещён вправо или влево на величину табуляции.
AndrewVolkov (2004-07-07 02:30:00) [6]Блин, у меня сегодня какой-то день открытий.
Ассерт - тоже оказался забойной штучкой.
Ctrl+KI/Ctrl+KU
что нажимать - одновременно K i I?
Ctrl+Shift+C никакой реакции.
GuAV (2004-07-07 02:25:00) [7]Assert поднимет исключение EAssertionFailed при ложности условия. Тескт сообщения об ошибки - второй параметр.
> Экономия времени и такое удобство.
А ещё есть Ctrl+KI/Ctrl+KU, Ctrl+Shift+C и еще мого его. IDE дельфи вся рульная.
AndrewVolkov (2004-07-07 02:14:00) [8]то jack128 спасибо
такая рульная штучка оказалась Ctrl+J. Экономия времени и такое удобство.
А про Аssert я толком не въехал. Моего английского по Ф1 явно не хватило....;-(
GuAV (2004-07-07 02:12:00) [9]
> Ситуация с локальными...
ну если уж очень хотите страховаться, то оставьте ваш код, но в самом начале дописать :=nil
GuAV (2004-07-07 02:10:00) [10]
> это нужно делать в обратном порядке. Сначала набираешь в
> редакторе trycf , а потом нажимаешь Ctrl + J
не знал.. раньше всегда сначала ctrl+J а потом искал. отныне буду. крутеем :)
jack128 (2004-07-07 02:06:00) [11]
> Ctrl+J->trycf
> что это?
это нужно делать в обратном порядке. Сначала набираешь в редакторе trycf , а потом нажимаешь Ctrl + J
Palladin (2004-07-07 02:04:00) [12]
> [19] AndrewVolkov © (07.07.04 02:00)
А про Assert достаточно просто описано в справке...
Palladin (2004-07-07 02:03:00) [13]Ситуация с локальными...
Procedure SOC1(Var rp_oSOC:TSOC);
Begin
SO:TSO.Create;
...
забыли освободить
End;
Procedure SOC2;
Var
SO:TSO;
Begin
SO:TSO.Create;
...
if надо получить другой
begin
забыли освободить...
SOC1(SO);
end;
забыли освободить...
End;
это сильно упрощенная модель, с виртуальными конструкторами такое очень может произойти в более сложном варианте...
AndrewVolkov (2004-07-07 02:00:00) [14]
Ctrl+J->trycf
что это?
и что делает Assert?
GuAV (2004-07-07 02:00:00) [15]
> нет... я про присвоение им ''
Я так и понял.
GuAV (2004-07-07 01:56:00) [16]
> Assert(SimpleObject=Nil,'Возможна утечка памяти "SimpleObject"');
> SimpleObject:=TSimpleObject.Create;
> Try
> ...
> Finally
> FreeAndNil(SimpleObject);
> ну или
> SimpleObject.Free;
> SimpleObject:=Nil;
> End;
Это если ссылка на экземпляр класса - глобальная переменная или поле другого объекта. для локальных:
для локальных Ctrl+J->trycf
Palladin (2004-07-07 01:54:00) [17]
> [10] GuAV © (07.07.04 01:39)
нет... я про присвоение им '' ...
AndrewVolkov (2004-07-07 01:53:00) [18]Большое спасибо.
После последних двух топиков - ясно все как ясный день
Еще раз премного благодарен...
Palladin (2004-07-07 01:51:00) [19]заболтался...
Assert(SimpleObject <>Nil,'Возможна утечка памяти "SimpleObject"');
GuAV (2004-07-07 01:49:00) [20]
> Фри и Дестрой - чистим, удаляем
да.
> нил - только удаляем?
нет, и не удаляем.
Понимаешь, в переменной хранистя ссылка. Четыре байта. Сам класс - в "куче". И кстати это про классы а не про объекты. Объекты - это наследство Паскаля и у них Фри и Дестрой - нет заранее заданного - как объявишь так и будет. И давай уже RTFM Object Pascal Reference.