BSTR共享内存问题

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

 

 

你可能感兴趣的:(共享内存)