Re: Все гораздо "круче"
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 09.09.03 15:04
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Вот такая значит беда:

Однозначно

КД>BCB6+SP4

////////////////////////////////////////////////////////////////////////////////
//class TMyVariant

class TMyVariant:public VARIANT
{
 public:
  TMyVariant()
  {
   vt=VT_EMPTY; cout<<"create this=0x"<<hex<<this<<dec<<endl;
  }

  TMyVariant(const TMyVariant& x)
  {
   ::VariantCopy(this,const_cast<TMyVariant*>(&x));
   cout<<"create copy this=0x"<<hex<<this<<dec<<endl;
  }

 ~TMyVariant()
  {
   ::VariantClear(this); cout<<"destroy this=0x"<<hex<<this<<dec<<endl;
  }
};//class TMyVariant

//-----------------------------------------------------------------------
const VARIANT    __c_variant_null_0=TMyVariant();
VARIANT            __variant_null_0=TMyVariant();

//not exists in target code!!!
const TMyVariant  __c_variant_null_1(TMyVariant());

//not exists in target code!!!
TMyVariant          __variant_null_1(TMyVariant());

const TMyVariant  __c_variant_null_2=TMyVariant();
TMyVariant          __variant_null_2=TMyVariant();

//-----------------------------------------------------------------------
int main(int /*argc*/, char* /*argv*/[])
{
 cout<<"vt c_0:"<<__c_variant_null_0.vt<<endl;
 cout<<"vt c_0:"<<__c_variant_null_0.vt<<endl;

 //Compiler ERROR: E2294 Structure required on left side of . or .
 //cout<<"vt c_1:"<<__c_variant_null_1.vt<<endl;

 //Compiler ERROR: E2294 Structure required on left side of . or .
 //cout<<"vt c_1:"<<__c_variant_null_1.vt<<endl;

 cout<<"vt c_2:"<<__c_variant_null_2.vt<<endl;
 cout<<"vt c_2:"<<__c_variant_null_2.vt<<endl;

 cout<<"---- main"<<endl;

 {
  cout<<"lc_0"<<endl;
  const VARIANT    __c_null_0=TMyVariant();
  cout<<"l_0"<<endl;
  VARIANT            __null_0=TMyVariant();

  cout<<"lc_1"<<endl;
  const TMyVariant  __c_null_1(TMyVariant());
  cout<<"l_1"<<endl;
  TMyVariant          __null_1(TMyVariant());

  cout<<"lc_2"<<endl;
  const TMyVariant  __c_null_2=TMyVariant();
  cout<<"lc_2"<<endl;
  TMyVariant          __null_2=TMyVariant();
 }

 cout<<"---- main [exit]"<<endl;

 return 0;
}


На выход идет:
create this=0x4030a4
create this=0x4030b4
create this=0x4030c4
create this=0x4030d4
vt c_0:0
vt c_0:0
vt c_2:0
vt c_2:0
---- main
lc_0
create this=0x12ff5c
l_0
create this=0x12ff4c
lc_1
l_1
lc_2
create this=0x12ff7c
lc_2
create this=0x12ff6c
destroy this=0x12ff6c
destroy this=0x12ff7c
---- main [exit]
destroy this=0x4030d4
destroy this=0x4030c4


Объекты
__c_variant_null_1
__variant_null_1
__c_null_1
__null_1

вообще не создаются. Плюс проблема с не вызовом деструкторов.

Мне уже становится страшно ...
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.