Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.27;
Скачать: CL | DM;

Вниз

Существует ли экземпляр класса   Найти похожие ветки 

 
Gydvin ©   (2007-12-27 14:08) [0]

Имеется потенциально "опасный" участок кода. В котором создаются и высвобождаются экземпляры разнообразных классов. Заключил все это дело в обертку try..except. Теперь же хочу в случае исключения прибить "живые" экземпляры. Как можно проверить, какие из них еще живы?


 
clickmaker ©   (2007-12-27 14:11) [1]

var SomeInstance: TSomeClass;

...
SomeInstance := nil;

...
try
...

except
 if (SomeInstance <> nil) then SomeInstance.Free;
end;


 
Сергей М. ©   (2007-12-27 14:21) [2]


> создаются и высвобождаются экземпляры разнообразных классов


Что, сами по себе ?
Тебе разве эти "процессы" не подконтрольны ?


 
Gydvin ©   (2007-12-27 14:26) [3]

чесно говоря не въехал (

допустим так

var bitmap:tbitmap;

....

try
.....

bitmap:=tbitmap.create;

...  //где-нить здесь ловим исключени и вываливаемся в except

bitmap.free;
....

except

 ///как узнать живой ли еще bitmap?
end;

просто классов используется несколько разных и некоторые из них могут вызвать исключение, например по доступу к файлу, доступ ведется из нескольких потоков. И может возникнуть ситуация, когда один поток захочет прочитать файло в момент записи из другого.


 
Gydvin ©   (2007-12-27 14:27) [4]


> Что, сами по себе ?Тебе разве эти "процессы" не подконтрольны
> ?

да не, подконтрольны. просто берегусь


 
Сергей М. ©   (2007-12-27 14:29) [5]


> Gydvin ©   (27.12.07 14:26) [3]


Криво делаешь - кривой и результат.

bitmap:=tbitmap.create;
try
.. вселенская катастрофа ..
except
//что бы ни случилось во время оной, сначала уничтожим объект
 bitmap.Free;
 raise;
end;


 
Gydvin ©   (2007-12-27 14:34) [6]

Это - то я понимаю, и тбитмап привел ради примера. На самом деле работа ведется со стримами и еще ко с чем. А так как количество потоков, заранее неизвестно, то я просто хотел с экономить ресурсы и создавать и высвобождать объекты по мере надобности.


 
clickmaker ©   (2007-12-27 14:34) [7]

еще лучше
try

finally
 bitmap.Free;
end;

собссно, не пойму, в чем все-таки проблема?


 
Palladin ©   (2007-12-27 14:34) [8]

ну мля, если bitmap все равно должен в конце концов освободится, на кой писать вызов Free в секции except если сверху нам дано finally

bitmap:=tbitmap.create;
try
.. вселенская катастрофа ..
finally
//что бы ни случилось во время оной, объект все равно уничтожится
bitmap.Free;
end;


 
Gydvin ©   (2007-12-27 14:39) [9]

короче говоря все это от того, что я нехочу на каждый объект ставить обработчик исключений. А хочу поставить один на всю функцию. Соответсвенно прибить в случае чего, все что там есть.


 
Palladin ©   (2007-12-27 14:41) [10]

и что?
ну инициализируй всю твою кучу объектов в Nil перед работой "потенциально опасного" участка кода да оберни всю фкнкцию в try finally
и в секции finally вызови у всех free, в чем проблемма то?


 
Gydvin ©   (2007-12-27 14:48) [11]

в этом случае с высвобождением ненужных объектов придется подождать до конца выполнения функции, чего бы нехотелось...

А придеться ждать?


 
Palladin ©   (2007-12-27 14:51) [12]


> чего бы нехотелось...

если не хочешь ждать, пиши кучу try finally на каждый объект


 
Сергей М. ©   (2007-12-27 14:53) [13]


> На самом деле работа ведется со стримами и еще ко с чем


А по барабану с чем "ведется работа".
Распределил ресурс ?
Изволь контролировать его состояние на всем протяжении его "жизни".
А не можешь контролировать - дорога одна: индивидуальный try..finally для каждого из таких ресурсов.


 
Gydvin ©   (2007-12-27 14:55) [14]

понятно. спасибо


 
han_malign ©   (2007-12-27 15:07) [15]

FreeAndNil


 
Anatoly Podgoretsky ©   (2007-12-27 17:32) [16]

> Gydvin  (27.12.2007 14:34:06)  [6]

Какая разница, все равно контролируй с помощью try


 
oxffff ©   (2007-12-27 20:11) [17]


> clickmaker ©   (27.12.07 14:11) [1]
> var SomeInstance: TSomeClass;
>
> ...
> SomeInstance := nil;
>
> ...
> try
> ...
>
> except
>  if (SomeInstance <> nil) then SomeInstance.Free;
> end;


А if зачем ?

:)


 
Anatoly Podgoretsky ©   (2007-12-27 22:26) [18]

> oxffff  (27.12.2007 20:11:17)  [17]

Процессору тоже надо чем то заниматься.



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

Текущий архив: 2008.01.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
15-1198248427
авыф
2007-12-21 17:47
2008.01.27
нейронные сети


15-1198194390
Tirael
2007-12-21 02:46
2008.01.27
Если бы программисты строили дома...


15-1197987450
ПЛОВ
2007-12-18 17:17
2008.01.27
Учет техники на предприятии (в електронном виде)


3-1190618612
MZ
2007-09-24 11:23
2008.01.27
Узнать количество измененных записей


2-1198899007
Joe
2007-12-29 06:30
2008.01.27
Перетаскивание строк в ListBox