在Visual C++6.0 MFC中,CString是否可以像简单类型而不是类一样安全地处理
Can a CString be safely treated like it was a simple type and not a class, in Visual C++ 6.0 MFC?
不幸的是,我的文档要么是(a)没有任何errrata的原始产品文档(MS VC++6.0帮助文件),要么是(b)适用于更高MFC版本的更高MSDN帮助。
特别是:
[Q1]是否已知VC++6 MFCCString
中的运算符+=
存在错误?这段来自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中删除,但我首先需要修补一个正在崩溃的生产系统,然后我就可以开始推进这个遗留代码库的巨大任务了。
根据VC6.0 的文档
CString对象可以由于串联操作而增长。CString对象遵循"值语义">
Microsoft文档似乎表明CString
在目的上与std::string
相似,因为它在需要时会自动增长,并且可以安全地作为参数或函数的返回值传递。
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- C++11如何在1个线程中使用条件变量处理2个线程安全队列
- 窗口上信号处理程序的异步安全写入函数
- Qt的事件循环线程是安全的还是原子的?处理"队列连接"时如何同步?
- 从函数安全返回和处理动态分配的内存,C++ 11
- 我可以使用模板作为多态处理数组的安全解决方案
- 以更健壮和类型安全的方式处理ASCII命令
- 使TSYNEDIT线线程安全用于背景处理
- 在 CLI 中转换日期时间time_t错误处理C++是否安全
- 内联 asm 分配给"FS:0":处理程序未注册为安全处理程序
- C++ 密码处理安全实践
- 如果我对async_read进行两次调用,那么只有在处理完第一次调用之后,才会处理第二次调用,这是否安全
- 这是实现错误处理的安全方法吗
- 从其处理程序或处理程序 dtor 销毁 boost::asio 计时器是否安全?
- 在单元安全代码中处理文本零
- X 的错误处理程序抛出异常是否安全?
- 提升线程 - 安全/有保证的处理线程中断的方式
- 信号处理程序异步安全函数
- 在处理大文件 (> 2GB) 时,将pos_type分配给uint64_t是否安全?
- SIGRTMIN和SIGRTMAX在信号处理程序中使用安全吗?