Как правильно реализовать конструктор перемещения, учитывая следующий класс?:
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.
Это правильная реализация конструктора перемещения?