Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.007 c
15-1198248427
авыф
2007-12-21 17:47
2008.01.27
нейронные сети


2-1198441957
azl
2007-12-23 23:32
2008.01.27
Статус DBCheckBox


2-1198594274
Ламот
2007-12-25 17:51
2008.01.27
SQL create table


1-1193213006
kyn66
2007-10-24 12:03
2008.01.27
Подобие EkRtf для Excel


15-1197242225
Fixi4eeG
2007-12-10 02:17
2008.01.27
Установка компонентов Rxlib





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский