LINUX.ORG.RU

История изменений

Исправление victor79, (текущая версия) :

Тогда получается такой вариант, будет вызван много раз деструктор, и если он не тривиален, и тяжел, то будет тяжело (тривиальный сам заоптимизируется). И swap через весь массив потянется.

   void delByIndex(uint idx) {
       assert( idx < cnt );

       buf[idx].~T();

       for (uint ii = idx+1; ii < cnt; ++ii) {
          new(&buf[ii-1]) T(std::move(buf[ii]));
          buf[ii].~T();
       }

       --cnt;
   }

Исходная версия victor79, :

Тогда получается такой вариант, будет вызван много раз деструктор, и если он не тривиален, и тяжел, то будет тяжело (тривиальный сам заоптимизируется).

   void delByIndex(uint idx) {
       assert( idx < cnt );

       buf[idx].~T();

       for (uint ii = idx+1; ii < cnt; ++ii) {
          new(&buf[ii-1]) T(std::move(buf[ii]));
          buf[ii].~T();
       }

       --cnt;
   }