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

 

 

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

转载于:https://www.cnblogs.com/yuanxingdefan/p/3434185.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值