visual-c – 如何交换MFC CString?
发布时间:2020-12-16 07:27:19 所属栏目:百科 来源:网络整理
导读:好的,所以我在 copy-and-swap idiom上全部售罄,我想我大多知道如何实现它. 但是,或者代码库使用MFC’s CString class作为字符串,这不会改变. 因为交换必须(应该???)不是,我不能这样做 std::swap(this-my_cstring,rhs.my_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时,它总是会复制. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |