请问以下几种情况正确吗:
1.
CComBSTR cbstr(L"jacky ff");
TCHAR * p=cbstr;
trace(p);//编译和运行通过2.
BSTR bstrText = ::SysAllocString(L"Tesvvvvt");
p=bstrText;
trace(p);
SysFreeString(bstrText); // 用完释放BSTR可以直接赋值给char*吗?//编译和运行通过
3.
BSTR bstrText = _bstr_t("This is a test");
//编译和运行通过
//但问题是_bstr_t调用了析构函数了。4.
BSTR bstrText = CComBSTR("This is a test");
//编译和运行通过
//但问题是CComBSTR调用了析构函数了。
1.
CComBSTR cbstr(L"jacky ff");
TCHAR * p=cbstr;
trace(p);//编译和运行通过2.
BSTR bstrText = ::SysAllocString(L"Tesvvvvt");
p=bstrText;
trace(p);
SysFreeString(bstrText); // 用完释放BSTR可以直接赋值给char*吗?//编译和运行通过
3.
BSTR bstrText = _bstr_t("This is a test");
//编译和运行通过
//但问题是_bstr_t调用了析构函数了。4.
BSTR bstrText = CComBSTR("This is a test");
//编译和运行通过
//但问题是CComBSTR调用了析构函数了。
CComBSTR/_bstr_t 是对BSTR的封装;
char* ansi字符串指针1)不正确,如果你的程序是UNICODE版不会有问题,否则不能直接等;
2)BSTR不可以直接赋值给char*,因为两个类型明显不一致;
3)这是C++类作用域的范畴,跟BSTR没关系;
4)同3
不可以,BSTR是所指示的字符串是宽字节的,要用WCHAR,当然你强制转换另算
析构函数只要是在大括号内不调用就没事的