为什么VARIANT变量的值会自动被取代

new_zhongbao 2012-08-23 06:05:49
CString str1(_T("111")),str2(_T("222"));
VARIANT vt;
vt.vt = VT_BSTR;
vt.bstrVal = _bstr_t(str1);
BSTR bstrTemp = _bstr_t(str2);

为什么执行到最后一句的时候vt的值被str2取代了?
求高手解释
...全文
114 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
new_zhongbao 2012-08-25
  • 打赏
  • 举报
回复
谢谢,确实是这个原因,又学习了,呵呵[Quote=引用 2 楼 的回复:]

这样用

CString str1(_T("111")),str2(_T("222"));
VARIANT vt;
vt.vt = VT_BSTR;
vt.bstrVal = _bstr_t(str1).Detach();
BSTR bstrTemp = _bstr_t(str2).Detach();

用完了
SysFreeString(vt.bstrVal)
SysFre……
[/Quote]
new_zhongbao 2012-08-25
  • 打赏
  • 举报
回复
谢谢,确实是这个原因[Quote=引用 2 楼 的回复:]

这样用

CString str1(_T("111")),str2(_T("222"));
VARIANT vt;
vt.vt = VT_BSTR;
vt.bstrVal = _bstr_t(str1).Detach();
BSTR bstrTemp = _bstr_t(str2).Detach();

用完了
SysFreeString(vt.bstrVal)
SysFre……
[/Quote]
new_zhongbao 2012-08-25
  • 打赏
  • 举报
回复
谢谢,确实是这个原因[Quote=引用 2 楼 的回复:]

这样用

CString str1(_T("111")),str2(_T("222"));
VARIANT vt;
vt.vt = VT_BSTR;
vt.bstrVal = _bstr_t(str1).Detach();
BSTR bstrTemp = _bstr_t(str2).Detach();

用完了
SysFreeString(vt.bstrVal)
SysFre……
[/Quote]
Occam's_Razor 2012-08-24
  • 打赏
  • 举报
回复
这样用

CString str1(_T("111")),str2(_T("222"));
VARIANT vt;
vt.vt = VT_BSTR;
vt.bstrVal = _bstr_t(str1).Detach();
BSTR bstrTemp = _bstr_t(str2).Detach();

用完了
SysFreeString(vt.bstrVal)
SysFreeString(bstrTemp)

你上面的都是用的临时变量,执行到下一行_bstr_t就会调用析构把里面的数据释放掉
候vt的值被str2取代只是假象,是_bstr_t 两次申请到的地址是一致的



new_zhongbao 2012-08-24
  • 打赏
  • 举报
回复
求高人指导

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧