КД>вообще не создаются. Плюс проблема с не вызовом деструкторов.
Эти обьекты не создаются потому что не используются. Раз не создаются то и не уничтожаются.
КД>>вообще не создаются. Плюс проблема с не вызовом деструкторов. O>Эти обьекты не создаются потому что не используются. Раз не создаются то и не уничтожаются.
Нет. Ты видел во втором примере такие закоментированные строчки
//Compiler ERROR: E2294 Structure required on left side of . or .
//cout<<"vt c_1:"<<__c_variant_null_1.vt<<endl;
Они потому и закоментированы, потому что компилятор по-любому не создает эти объекты.
Кстати, компилятор не должен устранять не используемые объекты, так как цель этих объектов может быть именно в их создании и разрушении. Примером являются всякие блокировщики доступа к ресурсам.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: Инициализация гл. переменных и временные объекты
КД>};
КД>const VARIANT __c_variant_null=TMyVariant();
КД>VARIANT __variant_null=TMyVariant();
КД>int main(int/*argc*/, char* /*argv*/[])
КД> {return 0;}
КД>
КД>А ведь, по идее — должен ? КД>Я на всякий случай даже точку прерывания на самой VariantClear ставил — не срабатывает.
Насколько я понимаю, смысл создания TMyVariant в том, чтобы после завершения программы
__variant_null и __с_variant_null самоотчистились, но этого в любом случае не произойдёт ,
т.к. при завершении вызовется ~VARIANT, а не ~TMyVariant. А т.к. у VARIANT деструктора
нет, то ничего и не вызывается.
Поэтому надо писать:
Хотя может вы, пиша VARIANT __variant_null=TMyVariant();
имели ввиду, что __variant_null иницализируется с помощью временного объекта типа TMyVariant ?
Хотя на мой взгляд это не имеет ни какого смысла, т.к. деструктор TMyVariant вызовется ещё до
начала main().
Если же это так сказать просто эксперимент, то действительно в Borland C++ деструктор почему-то
не вызывается. Такое ощущение, что он принимает чужой конструктор от TMyVariant за конструктор
от VARIANT, и глазом не моргнув его использует для создания. Что самое интересное, если в VARIANT
добавить конструктор, то всё начинает работать правильно .
Здравствуйте, Федько Олег, Вы писали:
ФО>Если же это так сказать просто эксперимент, то действительно в Borland C++ деструктор почему-то ФО>не вызывается. Такое ощущение, что он принимает чужой конструктор от TMyVariant за конструктор ФО>от VARIANT, и глазом не моргнув его использует для создания. Что самое интересное, если в VARIANT ФО>добавить конструктор, то всё начинает работать правильно .
Ага. Это именно эксперимент. Просто одно из чуд Borland-а падало при комипляции реального кода
VARIANT __null_varant=TVariant();//это дикий способ инициализации __null_variant.vt=VT_EMPTY
Переделал на нормальную инициализацию
VARIANT __null_varant={0};
А потом начал мучать под микроскопом и увидел эту охинею с деструкторами.
Правда от "перевозбуждения" лоханулся с объявлениями функций.
Павел —
-- Пользователи не приняли программу. Всех пришлось уничтожить. --