c++ - punteros - smart pointer c programming
¿Cuál es la diferencia entre BSTR y_bstr_t? (3)
¿Alguien puede explicar la diferencia entre los tipos mencionados anteriormente y el uso de algunas muestras para explicar claramente la diferencia entre los dos?
¡Cualquier ayuda sería muy apreciada! Nota: esta pregunta es un spin-off de esta otra pregunta
_bstr_t ajusta el tipo de BSTR. Entonces, cuando crea una instancia de _bstr_t, también está creando BSTR. _bstr_t simplemente lo envuelve todo y actúa como un "ptr inteligente" para el 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
BSTR es un puntero sin _bstr_t
, mientras que _bstr_t
es una clase que encapsula ese puntero.
Es la misma diferencia que char * vs. std :: string .
BSTR es el tipo de datos de cadena utilizado con COM.
_bstr_t es una clase contenedora que funciona como un puntero inteligente, por lo que liberará la memoria asignada cuando la variable se destruya o salga del alcance. _bstr_t también tiene recuento de referencias, que aumenta cada vez que pasa la variable _bstr_t por valor (evitando la copia innecesaria) y disminuye cuando ya no se usa. Cuando se destruyen todas las referencias, se libera la memoria asignada para la cadena.
Una alternativa al BSTR es el CComBSTR. También gestiona la memoria para el BSTR, pero no tiene recuento de referencias.