История изменений
Исправление 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;
}