为什么没有为派生类创建默认移动构造函数或赋值运算符?证明我的意思;具有此设置代码:
#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 进行的测试显示了相同的行为。
最佳答案
通读 0x FCD 中的 12.8(12.8/17 特别是移动构造函数),这似乎是一个 GCC 错误。我看到 4.5 中发生的事情与您在 4.4 中发生的事情相同。
我可能遗漏了已删除函数的极端情况或类似的情况,但我还没有看到任何迹象。
关于c++ - 移动构造函数和赋值运算符 : why no default for derived classes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2694298/