Конструктор перемещения и оператор присваивания: почему никакое значение по умолчанию для производных классов?

Почему существует конструктор перемещения по умолчанию или оператор присваивания, не созданный для производных классов? Продемонстрировать то, что я имею в виду; наличие этого кода установки:

#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 показал то же поведение.

6
задан doublep 22 April 2010 в 21:16
поделиться

1 ответ

Чтение до 12.8 в 0x FCD (12.8 / 17, в частности для перемещения ctor), похоже, является ошибкой GCC. Я вижу, что в 4.5 происходит то же самое, что и в 4.4.

Мне может не хватать крайнего случая для удаленных функций или чего-то подобного, но я пока не вижу никаких указаний на это.

6
ответ дан 17 December 2019 в 02:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: