Что нужно добавить в мой класс,чтобы вектор мог принимать rvalue ссылку на объект этого класса
Есть мной реализованный класс UniquePtr. Мне надо чтобы корректно работал метод push_back для вектора, состоящего из элементов этого класса:
std::vector<UniquePtr<Person>> v;
UniquePtr<Alice> alice(new Alice);
v.push_back(std::move(alice));
конструктор перемещения
UniquePtr(UniquePtr&& other) noexcept : ptr_(std::move(other.ptr_)) {
other.ptr_ = nullptr;
}
Что нужно добавить в исходный класс?
Ответы (1 шт):
Автор решения: Ariox
→ Ссылка
Конструктор перемещения для поддержки наследников реализуется примерно так:
template<class T>
class UniquePtr{
template<class U, std::enable_if_t<std::is_base_of<T, U>::value, bool> = true>
UniquePtr(UniquePtr<U>&& other) noexcept : ptr_(std::move(other.ptr_)) {
other.ptr_ = nullptr;
}
}