Коснтруктор перемещения для собственного класса 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)}
{}
};
Автор решения: HolyBlackCat
→ Ссылка
Реализовывать его самому не нужно.
Компилятор сам сгенерирует подходящий перемещающий конструктор, так же как и все остальные копирующие и перемещающие операции, и деструктор.
Общее правило: если можно их не писать, то лучше не писать их просто так. Это называют the rule of 0.