Безопасно ли передавать объект _bstr_t функции, ожидающей BSTR в качестве аргумента?

#c #msdn #bstr

#c #msdn #bstr

Вопрос:

Я новичок в C , поэтому, пожалуйста, потерпите меня. Я знаю, что _bstr_t это всего лишь класс-оболочка для BSTR , но, как видно из документации MSDN, _bstr_t у него нет оператора для преобразования BSTR .

Итак, могу ли я передать _bstr_t объект функции, ожидающей a BSTR в качестве аргумента, и безопасно ли это?

Или есть какой-нибудь лучший способ сделать это? Я особенно не хочу никаких утечек памяти при этом.

Я видел множество статей, поэтому просто запутался в этом. Извините, если это тривиальный вопрос.

Ответ №1:

_bstr_t не имеет оператора для преобразования себя в BSTR

Да и нет. BSTR определяется как эквивалентный wchar_t* в заголовочном файле «afx.h»:

 typedef _Null_terminated_ LPWSTR BSTR;
 

И у _bstr_t класса (в «comutil.h») есть операторы преобразования для этого, с const определителем или без него, как в:

 class _bstr_t {
public:
//...
//...
    // Extractors
    //
    operator const wchar_t*() const throw();
    operator wchar_t*() const throw();
//...
 

РЕДАКТИРОВАТЬ: но одно небольшое «предостережение» из документации для этих операторов:

Присвоение нового значения возвращаемому указателю не изменяет исходные данные BSTR.

Комментарии:

1. Так было бы безопасно для меня передать объект _bstr_t в качестве параметра и не беспокоиться о каких-либо утечках или проблемах??

2. @RajaShekar Да! Если параметр функции должен быть a BSTR , тогда преобразование будет выполнено; и я хотел бы думать, что реализации двух операторов, объявления которых я показал, будут «безопасными».