如何交换MFC CString?

时间:2011-10-05 12:01:10

标签: 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的实现,似乎没有允许交换的成员或函数......

1 个答案:

答案 0 :(得分:2)

自答案:

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

只有“99%”安全,就像CString对象IsLocked一样,它总是会复制。