Конструктор перемещения C++11


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

class C {
public:
    C();
    C(C&& c);
private:
    std::string string;
}

Конечно, идея состоит в том, чтобы избежать копирования stringили освобождения его памяти дважды.
Предположим, что базовый пример приведен просто для ясности, и мне нужен конструктор перемещения.


Я пробовал:

C::C(C&& c) {
    //move ctor
    string = std::move(c.string);
}

И

C::C(C&& c) : string(std::move(c.string)) {
    //move ctor
}

Оба компилируются нормально на gcc 4.8 и работают нормально. Кажется, вариант A является правильным поведением, stringкопируется, а не перемещается с вариантом B.
Это правильная реализация конструктора перемещения?

26
задан unexpectedvalue 1 May 2012 в 18:30
поделиться