gpt4 book ai didi

c++ - 异常安全代码和移动语义

转载 作者:IT老高 更新时间:2023-10-28 22:12:39 26 4
gpt4 key购买 nike

我想写容器类。这个容器有两个特化的插入方法——首先使用复制构造函数将数据从一个容器复制到另一个容器元素。如果复制构造函数抛出异常,我只是撤消对容器的所有更改,就像什么都没发生一样。

第二个特化使用移动构造函数,这就是事情变得复杂的地方。当我逐个元素地将项目从一个容器移动到另一个容器时,移动构造函数可能会引发异常。如果发生这种情况 - 当某些元素被移动而其他元素留在原来的位置时,我的状态真的很困惑。如果我尝试将元素移回 - 我可能会遇到另一个异常。

是否可以以异常安全的方式编写这样的东西,或者异常安全和移动语义是互斥的?

最佳答案

使用 std::move_if_noexcept在编写异常敏感代码时,但仍希望在编译时安全的情况下使用移动语义。

Scott Meyers' talk at GoingNative 2013了解更多详情。

PS:哦,是的,请记住,如果你的东西不是可复制构造的,那么无论你的移动构造函数是否抛出/不抛出,你都会移动它。

关于c++ - 异常安全代码和移动语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19585766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com