Правильное использование вариантов с VT_RECORD и VT_BYREFC++

Программы на C++. Форум разработчиков
Anonymous
Правильное использование вариантов с VT_RECORD и VT_BYREF

Сообщение Anonymous »

Мне нужно лучше понять записи, хранящиеся в VARIANT.
Если существует вариант типа VT_RECORD, он имеет следующую структуру (в 32-разрядной версии):

Код: Выделить всё

V->vt = VT_RECORD
V->DATA1 //(8 byte offset)  memory pointer to record's data (*void)
V->DATA2 //(12 byte offset) pointer to IRecordInfo interface (*IRecordInfo)
Похоже, что при выделении записи объект IRecordInfo является AddReffed
Поэтому при уничтожении варианта необходимо также освободить объект IRecordInfo.
А в случае варианта BYREF?
В этом случае вариант строится следующим образом:

Код: Выделить всё

V->vt = VT_RECORD | VT_BYREF
V->DATA1 // -> pointer to a pointer of record's data (**void)
V->DATA2 //-> pointer to IRecordInfo interface (here experienced it is not (**IRecordInfo) but (*IRecordInfo))
Что нужно делать с указателем IRecordInfo при выделении или освобождении записи BYREF?
Варианты BYREF обычно не меняют память при использовании их можно освободить без разыменования.
Но вот теперь у меня есть указатель на *IRecordInfo. Что делает VariantClear, когда освобождает вариант BYREF? Разыменовывает ли он объект IRecordInfo или нет?
Опыт приветствуется!

Подробнее здесь: https://stackoverflow.com/questions/785 ... d-vt-byref

Вернуться в «C++»