不同CString却指向了同一个地址

CString是MFC框架下的一个字符串类
CString利用一个叫做m_pszData的成员变量来储存字符串数据。

这两天编写程序遇到了一个很无语的错误,我的两个CString变量只要修改任何一个,其他的也跟着一起变。翻进对象里头看,能够看到两个不同的CString内的m_pszData变量竟然指向了同一个地址:

后来才知道,在新版本的MFC中,为了精简EXE文件尺寸和提高执行效率,编译器会将空字符串指向同一个地方。这里的空字符串可不仅仅是没有赋初值的字符串,甚至还包括赋值为[""]的字符串。。。解决的方法也就很简单了,别用[""]来为字符串初始化,至少用[" "]或者不同的字符为不同的字符串初始化,就是这样:

貌似可以通过编译选项来避免这种事情的发生。。有空再研究

Friskit

继续阅读此作者的更多文章