C移动语义和异常

在即将到来的C 0x标准中,当在移动构造函数中/中抛出异常时会发生什么?

原始对象将保留吗?或者是未定义状态下的原始和移动对象?语言提供的保证是什么?

最佳答案
我相信标准委员会最初试图使移动构造函数不允许抛出异常,但是(至少在今天)发现,试图执行它有太多的陷阱。

提案N3050,“允许移动构造函数引发(Rev 1)”已纳入标准草案。本质上,该建议增加了移动构造函数抛出的能力,但是不允许“抛出”移动以用于需要强异常安全性保证的某些操作(如果非抛出移动不是“ t可用)。

如果将一个移动构造函数标记为非抛出(noexcept)并抛出异常,std :: terminate()将被调用。

> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html

也许值得阅读David Abrahams的博客文章,讨论N3050打算解决的问题:

> http://cpp-next.com/archive/2009/10/exceptionally-moving/

转载注明原文:C移动语义和异常 - 代码日志