N3485 20.6.9.1 [allocator.members]/1 говорит:
Вызовы этих функций, которые выделяют или освобождают конкретную единицу памяти, должны происходить в едином общем порядке, и каждый такой вызов освобождения должен происходить до следующего выделения (если таковое имеется) в этом порядке.
Последнее требование меня смущает. Похоже, что стандарт говорит, что если выделить блок памяти (назовем его блоком a
), а затем выделить другой блок (назовем его блоком b
), то нельзя освободить блок a
, пока он не освободит блок b
.
Если это действительно то, что влечет за собой этот абзац, я не понимаю, как можно было бы реализовать что-то вроде роста vector
с эффективным использованием пространства; потому что нельзя было выделить больший буфер, а затем освободить ранее выделенный (слишком маленький) буфер.
Это действительно то, что означает этот абзац, или я неправильно читаю этот раздел?