Векторы не содержат Person
объектов, они просто содержат указатели. Перемещение этих указателей действительно означает выполнение копии. Итак, вы делаете две вещи: копируете указатель на один контейнер и удаляете указатель из другого контейнера. Простая реализация, подобная этой, должна быть всем, что вам нужно:
MoveLast() {
if (!persons.empty()) { // ensure source vector isn't empty
availablePersons.push_back(persons.back()); // copy last element to destination
persons.pop_back(); // remove last element from source
}
}
Если ваши векторы содержали тип, для которого было разрешено перемещение, то в качестве оптимизации вы можете изменить вторую строку следующим образом:
availablePersons.push_back(std::move(persons.back())); // move last element to destination