определенный компилятором конструктор перемещения с деструктором - PullRequest
1 голос
/ 16 июня 2019

Согласно ссылке cpp cpp-ref , компилятор не генерирует конструктор перемещения по умолчанию, если у нас есть определенный пользователем деструктор.

Фрагмент кода:

 class General
{
public:
    ~General();
    General();
    void testInitList();
};

int main(int argc, char **argv) {
    General b(std::move(General()));
    General g = std::move(b);
    g.testInitList();
    return 0;
}

Код компилируется, подразумевая, что компилятор сгенерировал конструктор перемещения по умолчанию.Код был скомпилирован с использованием gcc версии 5.4.0.

Может кто-нибудь объяснить, почему компилятор сгенерировал конструктор перемещения и оператор присваивания перемещения в этом случае, несмотря на наличие деструктора?

Best, Rahul

1 Ответ

2 голосов
/ 16 июня 2019

Когда нет конструктора перемещения или оператора присваивания, перемещение не выполняется. std :: move не выполняет перемещение.Он просто приводит аргумент, указывающий, что ход может быть выполнен , если возможно.Если это невозможно, то нет никакого движения и использование std::move ничего не делает.

...