远行的帆

没有谁能阻挡我前行的步伐,风雨兼程,我也将义无反顾。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
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

 

 

posted on 2013-11-20 20:29  远行的帆  阅读(255)  评论(0编辑  收藏  举报