C ++, если класс не может синтезировать конструктор перемещения, означает ли это, что конструктор перемещения удален? - PullRequest
0 голосов
/ 19 июня 2020

В коде

class A
{
public:
    A() = default;
    A(const A& obj) = default;
};

, поскольку я определяю конструктор копирования A, A не будет синтезировать конструктор перемещения. Но я все еще могу написать следующий код:

A obj;
A obj1 = std::move(obj); // call the copy constructor of A

Но если я определю класс A вот так

class A
{
public:
    A() = default;
    A(const A& obj) = default;
    A(A&& obj) = delete;
};

тот же код

A obj;
A obj1 = std::move(obj); // error: call to deleted constructor of A

, тогда как понять разницу между cannot synthesize a move constructor и the move constructor is deleted?

...