好的,所以我都在 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/