RefBaseEx.cpp

См. документацию.
00001 /*
00002  * CntmLib - Подсчет ссылок, потоки, синхронизация, асинхронные процедуры, события
00003  * Copyright (c) 2005, Овсеевич Роман, CntmLib@mail.ru
00004  * _______________________________________________________________________________
00005  * Разрешено свободное использование, копирование, распространение, изменение
00006  * (изменение сведений об авторских правах запрещено). Запрещена продажа и 
00007  * включение всей библиотеки или ее частей в другие библиотеки. В сведениях об
00008  * авторских правах на программу (или сведениях о программе, об авторах, 
00009  * использованных средствах разработки и т.д.) должна быть указана информация
00010  * о библиотеке CntmLib, ее авторе и, возможно, сайте или email'е.
00011  * Библиотека поставляется "как есть", без каких-либо гарантий со стороны автора.
00012  */ 
00013 
00014 #include <Cntm/RefCount/RefBaseEx.h>
00015 
00016 void Cntm::RefBaseEx::DeleteInstance()
00017 {
00018         // Если генерация события на уничтожение последеней ссылки разрешена, то генерирукем.
00019         if (enableOnReleaseNotify) 
00020         {
00021                 try { OnReleaseInstance(); } catch (...) {}
00022         }
00023 
00024         // Если все жизненные циклы объекта завершены, уничтожаем его.        
00025         if (reanimateCounter.DecAndTest())
00026         {
00027                 // Запрещаем вызов OnReleaseInstance и вход в эту секцию, 
00028                 // если в деструкторе будет вызван ReanimateInstance.
00029                 enableOnReleaseNotify = false;
00030                 reanimateCounter.Inc(); // Переводим счетчик в такое состояние, когда он никогда не достигнет 0.
00031 
00032                 // На время уничтожения объекта увеличиваем кол-во объектов, чтобы в случае, 
00033                 // если он последний, обнуление счетчика объектов произошло после завершения 
00034                 // работы деструтора.
00035                 try { SpecUtils::RefObjectImplUtils::IncRefObjectCount(NULL); } catch (...) {}
00036                 try { delete this; } catch (...) {}
00037                 SpecUtils::RefObjectImplUtils::DecRefObjectCount(NULL);
00038         }
00039 }

SourceForge.net Logo
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой  doxygen 1.5.3