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

原文地址:https://www.cnblogs.com/yuanxingdefan/p/3434185.html