#c
#c
Вопрос:
class Foo { int a; int b; int c; std::wstring d; std::vector<char*> e };
Предполагая большую строку (~ 512 байт) и ~ 512 байт для std::vector
и это вариант использования следующим образом:
void Test()
{
Foo foo;
DoSomething(std::move(foo)); // DoSomething will stuff it in a long-lived queue
}
По сути, я хочу, чтобы время жизни объекта RAII изменилось.
Это когда я реализую конструктор перемещения и оператор присваивания? Или просто делать std::move(..)
достаточно хорошо?
Комментарии:
1. Ваш вектор на самом деле не содержит строк, в большинстве случаев указатели на строки. Копирование
Foo
/вектор в любом случае не будет копировать строки.2. Как только вы начнете играть с указателями, предположите, что действуют Правила Трех и Пяти
Ответ №1:
std::move
бесполезен без конструктора перемещения и / или оператора присваивания перемещения.
Однако все члены вашего класса являются подвижными, и у вас нет определяемого пользователем деструктора, конструктора копирования или оператора присваивания копирования, поэтому будут неявно определенные конструктор перемещения и оператор присваивания перемещения, выполняющие правильные действия.
Итак, в данном конкретном случае ответ заключается в том, что вам не нужно определять конструктор перемещения или оператор присваивания.