只是一个简单的问题,在这个问题上,我找不到一个很好的参考,特别是关于未来标准的当前实现。
由于移动构造函数可以抛出,这意味着一些标准库函数不能提供强大的异常保证(例如。vector<T>::resize()
)。
有人建议: 1)使所有标准库移动构造函数“不抛”,2)增加对用户代码的编译时检查,以确保。std::pair<std::string, MyType>
定义了no杂乱的移动构造函数,或者根本没有移动构造函数。
这个建议发生了什么事(尤指)。(关于这个问题)?最终草案中的问题是如何“解决”的?
最重要的是,当我使用最近的GCC或MSVC 10时,它对我意味着什么?这些标准库的实现是否为eg提供了强大的异常保证。std::vector<MyTypeWithAThrowingMoveConstructor>::resize()
?
编辑:--我没有看到明显相关的这个问题。如果大家一致认为我的问题是重复的,那就结束它。然而,我真正感兴趣的是正在执行的是什么,而不是讨论了什么。
发布于 2011-05-15 13:53:08
我还没有检查具体的实现,但是一般的想法是,如果移动构造函数可以抛出,那么向量将不得不复制元素。这样,就有可能在异常情况下回滚。
甚至在move_if_noexcept
中定义了一个帮助函数<utility>
来帮助它决定该做什么。
https://stackoverflow.com/questions/6011428
复制