str1.LockBuffer(),str2不LockBuffer()再分两种情况
1str1为空,str2不为空
str1=str2;str1将申请一块新的内存吗?
2str1不为空,str2为空
str2=str1;str2将申请一块新的内存吗?

解决方案 »

  1.   

    会申请 看看CString的原代码吧 看那个拷贝构造函数
      

  2.   

    看了一下源码,函数很多,总结如下,若有错误,请DX指正
    CString sSrc,sDest;sDest=sSrc
    简单地说,LockBuffer之后,CString里的引用记数就变成-1,CString通过引用记数的优化功能失效。
    具体(参考CSimpleStringT::operator==):
    sDest若LockBuffer,则不用再考察sSrc的Lock属性,因为可以肯定优化功能已失效,
    常规处理。sSrc没有LockBuffer,则需要再考察sSrc的Lock属性,两种情况1常规处理(Lock)2优化处理(UnLock)