Quelle est la différence entre BSTR et _bstr_t?

Quelqu’un peut-il expliquer la différence entre les types mentionnés ci-dessus et certains exemples d’utilisation afin d’expliquer clairement la différence entre les deux?

Toute aide serait très appréciée! Remarque: cette question découle de cette autre question.

BSTR est le type de données de chaîne utilisé avec COM.

_bstr_t est une classe wrapper qui fonctionne comme un pointeur intelligent. Elle libère ainsi la mémoire allouée lorsque la variable est détruite ou si elle sort de la scope. _bstr_t a également un comptage de références, qui augmente chaque fois que vous transmettez la variable _bstr_t par valeur (évitant ainsi les copies inutiles) et décrémentant son utilisation. Lorsque toutes les références sont détruites, la mémoire allouée pour la chaîne est libérée.

Une alternative à BSTR est le CComBSTR. Il gère également la mémoire pour le BSTR, mais ne compte pas de référence.

BSTR est un pointeur brut, tandis que _bstr_t est une classe encapsulant ce pointeur.

C’est la même différence que char * vs std :: ssortingng .

_bstr_t encapsule le type BSTR. Ainsi, lorsque vous instanciez un _bstr_t, vous créez également BSTR. _bstr_t résume simplement tout pour vous et agit en quelque sorte comme un “ptr intelligent” pour le BSTR.

BSTR

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

SysAllocSsortingng ()

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

_bstr_t

https://msdn.microsoft.com/en-us/library/zthfhkd6.aspx