visual-c++ - 如何交换 MFC CString?

标签 visual-c++ mfc swap cstring copy-and-swap

好的,所以我都在 copy-and-swap idiom 上出售了我想我主要知道如何实现它。

但是,或代码库使用 MFC's CString class作为字符串,这不会改变。

swap必须(应该???)不抛出,我不能做

std::swap(this->my_cstring, rhs.my_cstring);

因为这将创建一个可能抛出的临时 CString 对象。 (加上它的低效。)

那么我还剩下什么?我应该添加一个try-catch吗?我真的应该允许这种(好吧,非常罕见)内存不足情况引发异常并使交换失败?

查看 CStrings 实现,似乎没有允许交换的成员或函数......

最佳答案

自我回答:

在更仔细地研究 CString 之后,似乎由于 CString 是引用计数字符串实现,因此通过 std::swap 交换它实际上是“99%”异常安全,因为发生的只是一些引用计数的增加和减少。

它只有“99%”安全,就像 CString 对象 IsLocked 一样,它会一直做一个副本。

关于visual-c++ - 如何交换 MFC CString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7660972/

相关文章:

c++ - fatal error LNK1158 : cannot run 'mt.exe'

c++ - 如何制作一个 CRect 对象数组?

c++ - 对话框在 VS2015 中显示为黑色

java - 如何使用 Javascript 交换出对 HTML 访问受限的 h2 URL 目标?

c - 用指针交换数组索引函数

C++ : Swapping template class elements of different types?

c++ - 我不明白这个 C++ 错误 - 错误 C2101 : '&' on constant

visual-c++ - 使用 Visual C++ 在 VS Code 中设置 GLEW 和 GLFW

winapi - 带有嵌套对话框的选项卡控件中的选项卡顺序 (WS_EX_CONTROLPARENT)

c++ - 我应该对引用使用 __restrict 吗?