2008-12-04 5 views
18

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

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

ответ

18

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

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

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

10

_bstr_t обертывает тип BSTR. Итак, когда вы создаете _bstr_t, вы также создаете BSTR. _bstr_t просто обертывает все для вас и действует как «умный ptr» в BSTR.

BSTR

http://msdn.microsoft.com/en-us/library/ms221069.aspx

SysAllocString()

http://msdn.microsoft.com/en-us/library/ms891285.aspx

_bstr_t

http://msdn.microsoft.com/en-us/library/zthfhkd6(VS.71).aspx

+0

+1 для фактического предоставления ссылок – 2012-05-23 19:12:08

13

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

Это та же разница, как полукокса * против станд :: струнной.