Контейнеры STL на стеке и "куче"

Интерфейсы помогают, Вы сохраняете зависимости от абстракций.

Код, который использует интерфейс только, зависит от интерфейса, таким образом, Вы знаете, что нет никаких искусственных зависимостей от деталей. Это дает Вам большую свободу до изменяющегося кода в будущем, так как Вы знаете точно, что должно & не должен повреждаться, когда Вы 'исправляете' ошибку или осуществляете рефакторинг.

, По-моему, это - сущность хорошего дизайна кода.

18
задан quamrana 29 October 2009 в 15:15
поделиться

3 ответа

Vectors allocate on the heap in their internals.

The only thing you pay for in the stack for a stack based bector is a couple of bytes, the inner buffer will always be allocated from the heap.

So effectively when you do a vec = new vector() you are allocating a small quantity, which may not be really good.

25
ответ дан 30 November 2019 в 07:33
поделиться

std::vector always has its buffer allocated on heap. So regardless of where the vector itself is allocated resizing it will only affect the heap.

1
ответ дан 30 November 2019 в 07:33
поделиться

В первом случае вы создаете вектор в стеке. Это не означает, что все внутренние объекты векторов тоже находятся в стеке. Фактически, вектор будет по-прежнему выделять память, необходимую только для хранения объектов в куче. Это потому, что для выделения в стеке вы должны знать, сколько объектов нужно создать. Но эта информация недоступна, поэтому единственный оставшийся вариант - выделить память для содержащегося объекта из кучи.

9
ответ дан 30 November 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: