Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
ВнизСуществует ли экземпляр класса Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c