Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

:=nil; Free; Destroy [D7, WinXP]


Страницы:   1 2

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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо