Эффективное перераспределение массива в C ++

Как мне эффективно изменить размер массива, выделенного с помощью некоторого соответствующего стандартам распределителя C ++? Я знаю, что никакие средства для перераспределения не предусмотрены в интерфейсе аллокатора C ++, но позволила ли версия C ++ 11 упростить работу с ними? Предположим, у меня есть класс vec с определенным оператором копирования-присваивания foo & operator = (const foo & x) . Если x.size ()> this-> size () , я вынужден

  1. вызвать allocator.destroy () для всех элементов во внутренней памяти foo .
  2. Вызвать allocator.deallocate () во внутренней памяти foo.
  3. Перераспределите новый буфер с достаточным местом для элементов x.size () .
  4. Используйте std :: uninitialized_copy для заполнения хранилища.

Есть ли способ более легкого перераспределения внутренней памяти foo без необходимости проделывать все это? Я мог бы предоставить реальный образец кода, если вы считаете, что он был бы полезен, но я считаю, что здесь в этом нет необходимости.

11
задан Community 23 May 2017 в 11:47
поделиться