移动构造函数和赋值运算符:为什么派生类没有默认值?

时间:2010-04-22 20:39:50

标签: c++ c++11 move-constructor

为什么没有为派生类创建默认移动构造函数或赋值运算符?证明我的意思;有这个设置代码:

#include <utility>

struct A
{
  A () { }
  A (A&&) { throw 0; }
  A& operator= (A&&) { throw 0; }
};

struct B : A
{ };

抛出以下任一行:

A  x (std::move (A ());
A  x;  x = A ();

但以下都没有:

B  x (std::move (B ());
B  x;  x = B ();

如果重要,我使用GCC 4.4测试。

编辑:后来用GCC 4.5测试显示了相同的行为。

1 个答案:

答案 0 :(得分:6)

在0xFCD中读取12.8(特别是移动ctor的12.8 / 17),这似乎是一个GCC错误。我在4.5中看到了与4.4中相同的事情。

我可能在遗失的函数或类似的东西上遗漏了一个角落案例,但我还没有看到任何迹象。