Я пишу собственный класс шаблона контейнера, который, как и многие (если не все) контейнеры в stl, может использовать указанный тип распределителя. Чтобы реализовать функцию вставки диапазона, мне нужно переместить некоторые элементы в контейнере на несколько пробелов вперед, где память все еще не инициализирована. Для этого я хочу использовать некоторую (несуществующую) версию std::uninitialized_move()
, которая использует распределитель в контейнере.
Другой вариант — выполнить перемещение объектов с помощью распределителя в цикле for и уничтожить созданные объекты в случае исключения. Это в основном повторная реализация std::uninitialized_move()
с дополнительной функцией.
Реализация стандартной библиотеки для моего компилятора (GCC) имеет именно те функции, которые мне нужны (std::__uninitialized_move_a()
, std::__uninitialized_copy_a()
и т. д.), и фактически используются в реализации стандартных контейнеров, но я думаю, что они скорее специфичны для компилятора.
Должен ли я использовать эти функции (переносимость)? Или есть другой, более практичный вариант? Может быть, в стандартной библиотеке есть что-то, чего мне не хватает.