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

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

Чтобы локальные переменные в функциях


Страницы:   1 2 3

Бездомный ©   (2011-10-06 13:35:00) 

обнулялись автоматически перед выполнением, есть такая директивка?

Если нет, можно ли как-нибудь написать такую процедурку LocalNullify:

function foo (param1, param2, ... paramN: AnyType1, ...): AnyType;
var
 ... тут неопределенное количество переменных, неопределенного размера ...
begin
 LocalNullify;
 //-- все локальные переменные обнулились, можно работать.
end;


Компилятор же некоторые типы (интерфейсы, динамические массивы) все-таки инициализирует.

P.S. Delphi 7, Delphi XE,XE2


RWolf   (2011-10-24 11:30:00) [1]


> [56]

ссылку обнулили, объект освободили.
с точки зрения вызывающего — вполне себе NilAndFree.


Плохиш   (2011-10-24 11:23:00) [2]


> RWolf ©   (24.10.11 11:06) [55]
> > Эм, у нас тут немного другое: NilAndFree
>
> в оригинальной FreeAndNil так и делается, не?
>
>

В каком месте он так делает? Может тебе поизучать скопированный тобой же код несколько раз до полного просветления.


RWolf   (2011-10-24 11:06:00) [3]

> Эм, у нас тут немного другое: NilAndFree

в оригинальной FreeAndNil так и делается, не?

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


Yaro2000   (2011-10-24 05:20:00) [4]

>> Dennis I. Komarov ©   (07.10.11 09:31) [44]
>> Вот не люблю и не использую FreeAndNil.
> Эм, у нас тут немного другое: NilAndFree

Пять баллов! :))))


Плохиш   (2011-10-13 01:58:00) [5]


> Бездомный   (06.10.11 13:45) [2]
>
> > Ega23 ©   (06.10.11 13:40) [1]
>
> Чтобы не писать:

Delphi вообще не правильная среда. Правильная среда должна иметь всего одну кнопку "Дай прогу".

PS. Прикольная такая ветка и до сих пор в основной.


Dennis I. Komarov   (2011-10-12 19:11:00) [6]

Так же довольно глупо пытаться уничтожить заведомо не существующий объект.

> var Object: TObject;
> begin
> Object := nil;
> Object.Free;
> end;

А по сему, если предположить что код выложен не полностью и объект все-таки где-то когда-то создан
var Object: TObject;
begin
...
Object := nil;
Object.Free;
end;

, то получаем утечку памяти, что уже страшно...


Dennis I. Komarov   (2011-10-12 18:14:00) [7]


> А это по твоему для потакания глупости сделано было?

Глупо пытаться сперва "занилить" ссылку, а после по ней пытаться уничтожить объект.


Бездомный   (2011-10-12 17:53:00) [8]


> Dennis I. Komarov ©   (07.10.11 10:24) [49]

А это по твоему для потакания глупости сделано было?

procedure TObject.Free;
begin
if Self <> nil then
  Destroy;
end;


Dennis I. Komarov   (2011-10-07 10:24:00) [9]

тогда согласен, не страшно, тогда глупо...


Ega23   (2011-10-07 10:15:00) [10]


var
 Object: TObject;
begin
 Object := nil;
 Object.Free;
end;


Dennis I. Komarov   (2011-10-07 10:12:00) [11]


> Мы его и не создали, если чё.

Ну ты так больше не шути :)


Ega23   (2011-10-07 10:07:00) [12]


> Ссылку потеряли, объект не уничтожили.


Мы его и не создали, если чё.


Бездомный   (2011-10-07 10:07:00) [13]


> Ссылку потеряли, объект не уничтожили. Чем не утечка?


var Object: TObject;
begin
Object := nil;
Object.Free;
end;

Нет же никакой ссылки.


Dennis I. Komarov   (2011-10-07 09:31:00) [14]


> Вот не люблю и не использую FreeAndNil.

Эм, у нас тут немного другое: NilAndFree


Dennis I. Komarov   (2011-10-07 09:05:00) [15]

Ну и?
Ссылку потеряли, объект не уничтожили. Чем не утечка?


Германн   (2011-10-07 01:08:00) [16]


> Dennis I. Komarov ©   (06.10.11 22:19) [40]


> Ega23 ©   (06.10.11 23:10) [41]

Вот не люблю и не использую FreeAndNil.
Так что на ваш диалог смотрю скептически. :(


Ega23   (2011-10-06 23:10:00) [17]


> А деструктор для кого тут вызван будет?


А он и не будет вызван. :)

procedure TObject.Free;
begin
 if Self <> nil then
   Destroy;
end;



> З.Ы. Или пива уже много? :)


Походу


Dennis I. Komarov   (2011-10-06 22:19:00) [18]


> эээ... А где тут утечка????


> begin
>  Object := nil;
>  Object.Free;
> end;

А деструктор для кого тут вызван будет?

З.Ы. Или пива уже много? :)


Ega23   (2011-10-06 21:54:00) [19]


> Утечка не страшно?


эээ... А где тут утечка????


> It's for me?


Да не, это про смысл "заниливания".


Dennis I. Komarov   (2011-10-06 21:46:00) [20]


> и если подумать, то ничего страшного не будет.

Утечка не страшно?

> Ega23 ©   (06.10.11 20:36) [35]

It's for me?


Страницы:   1 2 3

Наверх

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