2010-06-02 2 views
4

Я использую код, который обрабатывает массив производных объектов как массив базовых объектов. Размер обоих объектов одинаковый. Мне интересно:Использование массива производных объектов в качестве массива базовых объектов, когда размеры одинаковы (CComVariant/VARIANT)

  • Насколько это безопасно на практике, учитывая, что код будет компилироваться только на компиляторах Microsoft?

Вот мой пример:

BOOST_STATIC_ASSERT(sizeof(VARIANT)==sizeof(CComVariant)); 

//auto_array deletes[] the pointer if detach() isn't called at the end of scope 
auto_array<CComVariant> buffer(new CComVariant[bufferSize]); 

//...Code that sets the value of each element... 

//This takes a range specified as two VARIANT* - the AtlFlagTakeOwnership option 
//causes delete[] to be called on the array when the object pEnum referes to 
//is released. 
pEnum->Init(buffer.ptr,buffer.ptr+bufferSize,0,AtlFlagTakeOwnership); 
buffer.detach(); 

ответ

1

Да, CComVariant был разработан, чтобы быть прямой заменой для VARIANT. Он основывается на структуре вариантов и не добавляет никаких виртуальных членов и полей (и никакого виртуального деструктора), чтобы обеспечить макет памяти одинаковым. Множество небольших вспомогательных классов, таких как ATL/MFC, например, CRect, CPoint и т. Д.

Смежные вопросы