Первый вариант - умный указатель, второй - необработанный (обычный указатель). Умный указатель вызовет IUnknown :: Release () связанного объекта, когда он сам выйдет из области видимости. Необработанный указатель не сделает этого, и вы, возможно, получите утечку памяти, если не вызовете IUnknown :: Release () связанного объекта явно в подходящий момент.
Первый вариант будет пытаться создать экземпляр COM-объекта по своей собственной конструкции (поскольку вы используете конструктор, параметризованный с помощью идентификатора класса) и сгенерировать исключение, если это невозможно. Посмотрите источники для _com_ptr_t (comip.h) для деталей. Второй вариант даст вам указатель, инициализированный нулем - не связанный ни с одним объектом.
Умные указатели для COM-объектов имеют набор функций-членов, полезных для создания экземпляров объектов и вызова QueryInterface () - это часто может уменьшить объем кода, необходимого для записи. С необработанным указателем вам придется вызывать CoCreateInstance () с несколькими параметрами, большинство из которых вы установите на значения по умолчанию, и это заставит вас писать больше кода. Снова смотрите comip.h для получения полных источников _com_ptr_t - они вполне читабельны.
Общая рекомендация - использовать умные указатели, если у вас нет реальных причин поступить иначе.