gpt4 book ai didi

c++ - 在 Visual C++ 6.0 MFC 中,是否可以将 CString 安全地视为简单类型而不是类?

转载 作者:太空宇宙 更新时间:2023-11-04 12:01:35 27 4
gpt4 key购买 nike

不幸的是,我拥有的文档要么是 (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]);

[问题 2] 以这种方式将 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 的作者设计的,它是一个很好的简单的东西,你可以像使用 intchar 类型,并从函数返回它并以某种方式复制构造函数和内存管理都可以正常工作?

显而易见的事情:当然可以我会尽可能地将我的所有代码从 VC++ 6.0 中移除,但我首先需要修补崩溃的生产系统,然后我才能开始这项艰巨的任务向前移动这个遗留代码库。

最佳答案

根据 Documentation for VC6.0

CString objects can grow as a result of concatenation operations. CString objects follow “value semantics.”

关于c++ - 在 Visual C++ 6.0 MFC 中,是否可以将 CString 安全地视为简单类型而不是类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13894329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com