BSTR bstrName = OLESTR("Test String"); BSTR b1 = bstrName; BSTR b2 = bstrName; bstrName = OLESR("Test String1");
以上代码,结果 b1,b2都为Test String;
1 CComVariant variant =OLESTR("Test String"); 2 BSTR b1 = variant; 3 variant = OLESTR("Test String1“); 4 BSTR b2 = variant;
此时,b1,b2都为:TestString1.
原因,CComVariant在赋值时,重新分配了内存,即所持有的bstrVal 被重新赋值,而BSTR的本质是个指针:
typedef /* [wire_marshal] */ OLECHAR *BSTR;
所以,第一段代码,b1,b2各自指向了不同的常量字符串。
第二段代码,b1,b2都和variant.bstrval所指的对象一直,当variant.bstrval重新分配内存,指向其他字符串时,b1,b2也会跟着变化。
先关参考:
http://www.cnblogs.com/devcjq/articles/2430680.html