Чтобы скопировать массив можно воспользоваться
memcpy
, или делать это циклом.
Массив указателей от массива значений не отличается ничем. Просто там значения - это указатели. Аккуратно не допустите ошибки при использовании sizeof - если ему передать сам массив (указатель), то это будет размер указателя, а не всего массива. Надо брать размер одного элемента и домножать на их количество.
Если изначальный объект можно удалить, то вам надо переопределить оператор
перемещения, а не копирования. Внутри ваши массивы - это просто указатели и их можно перемещать как переменные:
keys_ = node.keys_;
node.keys_ = nullptr;
Не забудьте изначальное место затереть нулевым указателем, чтобы нечайнно потом два раза не удалить.
Так делать при копировании нельзя - ибо вы создаете несколько указателей на один и тот же массив и вообще непонятно, кто потом должен это удалять. Только при перемещении.
Когда вы определили оператор перемещения (или конструктор перемещения), то далее оберните элемент источник в std::move() при присваивании или передаче в конструктор. Тогда вызовется действительно перемещающий метод.