我正在尝试将_bstr_t对象转换为char数组。更具体地说,我有一个预先分配的char数组,我知道它的大小,我想在那里复制_bstr_t。
有一段时间我的代码看起来像这样:
bool ReadCharPtr(_bstr_t const& input, char* output, unsigned int max_len)
{
// THIS CODE IS WRONG !
const char * temp (input );
return ::strcpy_s(output, max_len, temp) == 0;
}
但是......我不确定,在Windows文档中不清楚,当我致电operator char*() const
时会发生什么。在堆中分配了什么,我必须在以后解除分配?
有没有办法避免这一步,实际上将_bstr_t字符转换为预分配数组?这样可以避免在堆上分配字符......
答案 0 :(得分:1)
没有。这不是必需的。文档说“操作符将指针返回到实际的内部缓冲区,因此无法修改生成的字符串。”这意味着_bstr_t负责删除。
另外,您可以检查_bstr_t的实现:
在MSVC 2010中:
_bstr_t使用_com_util :: ConvertBSTRToString()从BSTR获取字符指针。 _com_util :: ConvertBSTRToString()文档说这需要被调用者删除。但是,_bstr_t会缓存此指针并在析构函数中删除。