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