我想写容器类.此容器具有insert方法,该方法具有两个特征 - 首先使用复制构造函数将数据从一个容器复制到另一个容器元素.如果复制构造函数抛出异常我只是撤消对容器的所有更改,就像没有任何反应一样.
第二个专业化使用移动构造函数,这就是事情变得复杂的地方.当我将项目从一个容器移动到另一个容器元素时,移动构造函数可以抛出异常.如果发生这种情况 - 当一些元素被移动并且其他元素保留在原始位置时,我的状态非常混乱.如果我尝试移回元素 - 我可以得到另一个例外.
是否可以在异常安全方式或异常安全性中编写类似的内容,并且移动语义是互斥的?
ice*_*nix 22
在编写异常敏感代码时使用std :: move_if_noexcept,但仍然希望在编译时安全的情况下使用移动语义.
有关详细信息,请参阅2013年GoingNative上的Scott Meyers的演讲.
PS:哦,是的,请记住,如果你的东西不是可复制的,那么无论你的移动构造函数的抛出/不抛出,你都会移动它.
归档时间: |
|
查看次数: |
2551 次 |
最近记录: |