Что нужно добавить в мой класс,чтобы вектор мог принимать 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;
    }
}
→ Ссылка