В следующем примере кода у меня нет особых причин удалять конструктор перемещения, но я не понимаю, почему он компилируется (x
- это объект, который печатает, был ли он перемещен или скопирован).
class foo {
X x;
public:
foo()=default;
foo(const foo &)=default;
foo(foo &&)=delete;
};
int main()
{
vector<foo> v;
foo a;
v.push_back(a);
v.push_back(a);
}
Второй раз push_back
вызывается на std::vector
, он перемещает уже существующий объект, обычно с помощью операции перемещения. С конструктором перемещения foo
, объявленным по умолчанию, я вижу, как это происходит.
Однако, когда конструктор перемещения явно удаляется, я ожидаю, что компиляция не удастся, так как она все еще доступна для перегрузки, но удалена.
Он компилируется, а векторное перераспределение использует конструктор копирования.
Что здесь происходит?