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 }
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой 1.5.3 |