VARIANT 用 VariantClear( ) 函数清楚 VariantClear 会根据 VARIANT 的类型自动调用相应的资源释放函数下面是MSDN的说明If the vt member is VT_BSTR, the string is freed. If the vt member is VT_DISPATCH, the object is released. If the vt member has the VT_ARRAY bit set, the array is freed.
~Student
{
if(m_no)
::SysFreeString(m_no);
}
如果仅仅是ConvertStringToBSTR了,就需要自己最后去SysFreeString。
1、BSTR m_no
2、VARIANT m_no
m_no = _com_util::ConvertStringToBSTR("00000001"); 2、VARIANT m_no
m_no.vt = VT_BSTR;
m_no.bstrVal = _com_util::ConvertStringToBSTR("00000001");
都需要你自己调用SysFreeString去释放,否则你调用ConvertStringToBSTR而连带造成触发SysAllocString,从栈中开辟出的空间,谁给你释放?
我也是这样想,但是如果是第二种情况,即
VARIANT m_no;
这样的要怎样释放
VariantClear 会根据 VARIANT 的类型自动调用相应的资源释放函数下面是MSDN的说明If the vt member is VT_BSTR, the string is freed. If the vt member is VT_DISPATCH, the object is released. If the vt member has the VT_ARRAY bit set, the array is freed.
这要看你的应用情况,你都知道VARIANT里面放的是BSTR了,那么就直接释放m_no.bstrVal,或者调用楼上所说的VariantClear()去释放。