我想写容器类。这个容器有两个特化的插入方法——首先使用复制构造函数将数据从一个容器复制到另一个容器元素。如果复制构造函数抛出异常,我只是撤消对容器的所有更改,就像什么都没发生一样。
第二个专业化使用移动构造函数,这就是事情变得复杂的地方。当我逐个元素地将项目从一个容器移动到另一个容器时,移动构造函数可能会引发异常。如果发生这种情况 - 当某些元素被移动而其他元素留在原来的位置时,我的状态真的很混乱。如果我尝试将元素移回 - 我会遇到另一个异常。
是否可以以异常安全的方式编写这样的东西,或者异常安全和移动语义是互斥的?