【发布时间】:2015-03-12 17:47:15
【问题描述】:
如果我这样做了
std::copy(source, source + size, destination);
我有强大的异常安全保证吗? IE。如果 std::copy 抛出,destination 保持不变?
【问题讨论】:
-
请回复参考。
-
怎么可能?最终它必须开始接触目的地,如果在目的地中途停止工作,则会处于不一致的状态。
-
想一想 10 秒钟。唯一可能的方法是在复制之前备份目标。即使有可能,这也是一个糟糕的想法至少有以下原因:(1)它需要分配额外的内存,(2)它会很慢,(3)复制(备份)以及恢复(从备份)很容易抛出另一个异常,就像原来的抛出异常一样。