visual-c – 如何交换MFC CString?

好的,所以我在 copy-and-swap idiom上全部售罄,我想我大多知道如何实现它.

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

因为交换必须(应该???)不是,我不能这样做

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

因为那将创建一个可能抛出的临时CString对象. (加上效率低下.)

那么我离开的地方?我应该添加try-catch吗?我是否真的允许这种(很少,非常罕见)内存不足情况引发异常并使交换失败?

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

解决方法

自答:

在更仔细地研究CString之后,看起来由于CString是一个引用计数字符串实现的事实,通过std :: swap交换它实际上是“99%”异常安全,因为所有发生的是一些引用计数增量和减量.

它只有“99%”安全,因为当CString对象IsLocked时,它总是会复制.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...