【发布时间】:2011-06-11 13:13:56
【问题描述】:
在即将发布的 C++0x 标准中,当在移动构造函数内/期间抛出异常时会发生什么?
原始对象会保留吗?还是原始对象和移动对象都处于未定义状态?该语言提供了哪些保证?
【问题讨论】:
-
我想知道这是否类似于析构函数,如果它抛出异常,它只是一件坏事。我假设在大多数情况下你可以移动而无需做任何可能抛出的事情,因为你(通常)只是移动指针......
-
那么你的意思是不应该抛出异常,因为被复制的成员的状态在移动操作期间永远不会改变?
-
排序-类似于您用来证明
swap不能抛出的归纳论证。作为基本情况,重新分配和复制原语永远不会抛出。作为归纳步骤,具有一些数据成员的对象的移动构造函数可以在不抛出的情况下移动这些数据成员(归纳假设!),因此可以在不抛出的情况下移动自身。不过,独立地,我仍然想知道您的问题的正确答案是什么。
标签: c++ exception c++11 move-semantics