Здравствуйте, Melamed, Вы писали:
M>Конструкция вроде работает правильно
Это очень странно, поскольку static_cast не должен допускать столь вольных преобразований. Он может преобразовать void * в указатель на тип и наоборот, но не обычный числовой тип к указателю на тип. Что за компилятор такое допускает?
M>нужно ли в данном коде для освобождения ресурсов использовать метод Release интерфейса IUnknown или нет?
Это зависит только от того, кто владеет указателем на интерфейс. Обычно в COM подразумевается, что любое копирование указателя должно сопровождаться вызовом AddRef, а уничтожение копии — вызовом Release. На практике от этого иногда отступают.