CString 的问题大虾指教

qq570614012 2010-07-07 10:03:57
CString a,b;
a="123456789";
b=a;
b.ReleaseBuffer(5);


为什么b变成12345的同时 a也会变成12345 又不是引用.
...全文
101 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
谱靠一哥 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 finder_zhang 的回复:]
跟着ReleaseBuffer()的代码进去DEBUG了一下,VS2008的有BUG.
在VC6里面,ReleaseBuffer的时候,会先判断一下使用计数,像执行过b=a这些操作,同时指向同一地方的.
使用计数会是2,VC6里,会把使用计数减1,然后自身再建新的位置来改新的长度.

但是在VS2008里面,明明是使用计数是2,但却没有把使用计数减1,而去改buf里的内容.
[/Quote]
那release时是不是也是这样呢?
kemee 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 finder_zhang 的回复:]

跟着ReleaseBuffer()的代码进去DEBUG了一下,VS2008的有BUG.
在VC6里面,ReleaseBuffer的时候,会先判断一下使用计数,像执行过b=a这些操作,同时指向同一地方的.
使用计数会是2,VC6里,会把使用计数减1,然后自身再建新的位置来改新的长度.

但是在VS2008里面,明明是使用计数是2,但却没有把使用计数减1,而去改buf里的内容.
[/Quote]

牛X,越来越发现我的debug能力及其垃圾,堆栈汇编统统看不懂,出错愣是用MessageBox之类的输出信息定位到出错代码,相当的累啊
finder_zhang 2010-07-07
  • 打赏
  • 举报
回复
跟着ReleaseBuffer()的代码进去DEBUG了一下,VS2008的有BUG.
在VC6里面,ReleaseBuffer的时候,会先判断一下使用计数,像执行过b=a这些操作,同时指向同一地方的.
使用计数会是2,VC6里,会把使用计数减1,然后自身再建新的位置来改新的长度.

但是在VS2008里面,明明是使用计数是2,但却没有把使用计数减1,而去改buf里的内容.
dcw0402 2010-07-07
  • 打赏
  • 举报
回复
果然 GetBuffer前 还指向同一地址,GetBuffer后就不是了
你妹的特盗不 2010-07-07
  • 打赏
  • 举报
回复
b=a; 说明他们使用同一内存地址吧...
踏实每一步 2010-07-07
  • 打赏
  • 举报
回复
还有这种时,那边就是VS2008的bug
finder_zhang 2010-07-07
  • 打赏
  • 举报
回复
果然是这样,看来在VS2008里,不能乱用ReleaseBuffer()才行了.
VC6就没有问题.
主要是 b = a 的时候,他们大家都指向同一个堆中的字符地址了.
kemee 2010-07-07
  • 打赏
  • 举报
回复
我只知道GetBuffer()用来申请新的空间,并返回指针,不成对使用造成无法预料的结果的原因请楼下高手回答。。。。
qq570614012 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kemee 的回复:]
CString a,b;
a="123456789";
b=a;
b.GetBuffer(5);
b.ReleaseBuffer(5);

这样a就不会截断了
[/Quote]

为什么不成对的时候会被截断呢
kemee 2010-07-07
  • 打赏
  • 举报
回复
CString a,b;
a="123456789";
b=a;
b.GetBuffer(5);
b.ReleaseBuffer(5);

这样a就不会截断了
kemee 2010-07-07
  • 打赏
  • 举报
回复
b.ReleaseBuffer(5);之前要+ b.GetBuffer(5);

这2个貌似成对使用的,哥们
qq570614012 2010-07-07
  • 打赏
  • 举报
回复
帮我看看 ,加我QQ570614012,
qq570614012 2010-07-07
  • 打赏
  • 举报
回复
我用的VS2008 你们用的什么
惜玉 2010-07-07
  • 打赏
  • 举报
回复
测试发现,a 没有变成12345. 。。
Eleven 2010-07-07
  • 打赏
  • 举报
回复
你确定?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧