#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
, тогда преобразование будет выполнено; и я хотел бы думать, что реализации двух операторов, объявления которых я показал, будут «безопасными».