Рассмотрим стандартный контейнер, который использует динамическую память (то есть AllocatorAwareContainer) и имеет размер и емкость, равную нулю. Например, возьмите std::vector
и позвоните по номеру vec.resize(0); vec.shrink_to_fit();
.std :: terminate и destructors пустых контейнеров
Я бы предположил, что такие экземпляры контейнера будут содержать только nullptr
указатели для их логического содержимого и std::size_t
членов для отслеживания информации, например size
. Я бы тоже подумал, что их деструкторы ничего не поделают, потому что нет свободной памяти для освобождения.
Все деструкторы контейнеров, как я знаю, noexcept
. То есть при метании исключения при уничтожении они должны позвонить std::terminate
. В случае исключения Allocator::deallocate()
возможно исключение.
Могу ли я быть уверенным, что контейнеры в состоянии, описанном выше, никогда не звонят std::terminate
об уничтожении?
Извините, вы можете изменить свои первые два абзаца. Я не понимаю этого. – Arunmu
@Arunmu Не уверен. Я использую google translate, и это все, что я могу от него. – Orient
@Arunmu Если вопрос действительно плохо сформулирован, вы можете просто проголосовать, чтобы его закрыть. – Orient