Коснтруктор перемещения для собственного класса Vector, который наследуется от std::array

Я реализовываю шаблонный класс Vector, который наследуется от std::array. Вопрос: как я могу реализовать конструктор перемещения?

template <typename T, size_t N>
Vector<T, N>::Vector(Vector &&other)
{
    for (size_t i = 0; i < N; i++)
    {
        this->_M_elems[i] = other._M_elems[i];
    }

    // вот тут нужно отнять права у other
}

После того, как я скопировал данные, мне нужно отнять эти данные у other, верно? Если да, то как я могу это сделать? Заполнить его нулями не кажется мне выходом.


Ответы (2 шт):

Автор решения: user7860670

Достаточно будет вызвать перемещающий конструктор из базового класса, например:

#include <array>
#include <memory>
#include <utility>

class
t_Array
:   private ::std::array< ::std::unique_ptr< int >, 10 >
{
    public:
    t_Array(t_Array && other) noexcept
    :   array{::std::move(other)}
    {}
};

online compiler

→ Ссылка
Автор решения: HolyBlackCat

Реализовывать его самому не нужно.

Компилятор сам сгенерирует подходящий перемещающий конструктор, так же как и все остальные копирующие и перемещающие операции, и деструктор.

Общее правило: если можно их не писать, то лучше не писать их просто так. Это называют the rule of 0.

→ Ссылка