不幸的是,我拥有的文档要么是 (a) 没有任何勘误表的原始产品文档(MS VC++ 6.0 帮助文件),要么是 (b) 适用于更高 MFC 版本的更高版本的 MSDN 帮助。
尤其是:
[Q1] +=
VC++6 MFC 中的操作符是否存在漏洞CString
?VC++6 中的这段代码必须先修复,然后才能在现代 MFC 应用程序中编译:
CString szTemp;
unsigned char m_chReceive[MY_BUF_SIZE];
// compiles and seems to run but may be buggy in VC++6, won't compile in modern MFC
szTemp += m_chReceive;
// the above won't compile in modern MFC versions, but this "&+cast" does:
szTemp.Append( (const char *)&m_chReceive[0]);
[Q2] 以这种方式将 CString 作为函数的结果返回是否安全且健壮,还是会导致内存损坏?
CString MyClass:MyMethod(void)
{ CString Stuff;
// set a value to Stuff here.
return Stuff; // return a stack-allocated-CString
}
我的代码到处都使用上述两件事,而且似乎也表现出随机运行时内存损坏。这两件事对我来说是危险信号,我是否正确地怀疑 CString 是由 Visual C++ 6.0 中的 MFC 的作者int
打算char
的并且以某种方式复制构造函数和内存管理都正常工作了吗?
显而易见的东西: 是的,当然我会尽可能地从 VC++ 6.0 中删除我的所有代码,但我首先需要修补一个崩溃的生产系统,然后我可以开始推进这个遗留代码库的艰巨任务。