【发布时间】:2011-12-01 10:29:25
【问题描述】:
好的,所以我对copy-and-swap idiom 很感兴趣,我想我主要知道如何实现它。
但是,或者代码库使用MFC's CString class 作为字符串,这不会改变。
既然swap 必须(应该???)不能扔,我不能做
std::swap(this->my_cstring, rhs.my_cstring);
因为这将创建一个可能抛出的临时 CString 对象。 (加上它的低效。)
那么我还剩下什么?我应该添加一个try-catch吗?我真的应该允许这种(非常罕见的)内存不足的情况引发异常并使交换失败吗?
查看 CStrings 实现,似乎没有允许交换的成员或函数...
【问题讨论】:
-
我看不出有理由为内存不足进行防御性编码。在你的 CString 交换中处理它只是意味着它会在其他地方弹出,对吧?
-
@Aidan:“处理它”是什么意思。您根本无法以 100% 的异常保存方式交换
CString。 -
抱歉,我的意思是,如果您在交换时的 try/catch 可能遇到的唯一问题是内存不足,则不应有 try/catch,因为内存不足只会崩溃反正你在别处。
标签: visual-c++ mfc swap cstring copy-and-swap