Подтвердить что ты не робот

Какая разница между BSTR и _bstr_t?

Может ли кто-нибудь объяснить разницу между упомянутыми выше типами и некоторыми примерами использования, чтобы четко объяснить разницу между двумя?

Любая помощь будет высоко оценена! Примечание: этот вопрос является побочным из этого другого вопроса

4b9b3361

Ответ 1

BSTR - это строковый тип данных, используемый с COM.

_bstr_t - это класс-оболочка, который работает как интеллектуальный указатель, поэтому он освобождает выделенную память при уничтожении переменной или выходе из нее. _bstr_t также имеет подсчет ссылок, который увеличивается каждый раз, когда вы передаете переменную _bstr_t по значению (избегая ненужной копии) и уменьшаетесь, когда он больше не используется. Всякий раз, когда все ссылки уничтожаются, выделенная память для строки освобождается.

Альтернативой BSTR является CComBSTR. Он также управляет памятью для BSTR, но не имеет подсчета ссылок.

Ответ 2

BSTR - это необработанный указатель, а _bstr_t - это класс, инкапсулирующий этот указатель.

То же самое различие, что char * против std::string.