c++ puntatori Qual è la differenza tra BSTR e_bstr_t?




pointer ownership c++ (3)

_bstr_t esegue il wrapping del tipo BSTR. Quindi, quando istanziate un _bstr_t, state anche creando BSTR. _bstr_t semplicemente avvolge tutto per te e agisce come un "ptr intelligente" nel 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

Qualcuno può spiegare la differenza tra i tipi di cui sopra e alcuni esempi di utilizzo per spiegare chiaramente la differenza tra i due?

Qualsiasi aiuto sarebbe molto apprezzato! Nota: questa domanda è uno spin-off di quest'altra domanda


Answer #1

BSTR è il tipo di dati stringa utilizzato con COM.

_bstr_t è una classe wrapper che funziona come un puntatore intelligente, quindi libererà la memoria allocata quando la variabile viene distrutta o esce dall'ambito. _bstr_t ha anche il conteggio dei riferimenti, che aumenta ogni volta che si passa la variabile _bstr_t in base al valore (evitando la copia non necessaria) e si diminuisce quando non viene più utilizzato. Ogni volta che tutti i riferimenti vengono distrutti, la memoria allocata per la stringa viene liberata.

Un'alternativa a BSTR è CComBSTR. Gestisce anche la memoria per il BSTR, ma non ha il conteggio dei riferimenti.


Answer #2

BSTR è un puntatore raw, mentre _bstr_t è una classe che incapsula quel puntatore.

È la stessa differenza di char * rispetto a std :: string .





smart-pointers