2015-03-18 2 views
8

В C++ есть два способа объявить объект. Например:Размещение объектов на основе стека C++

// The first way 
vector<int> *nums = new vector<int>; 

// The second way 
vector<int> nums; 

Люди говорят, что первое объявление выделяет объект в куче, а второй - в стеке. Я могу представить, как это работает, если векторный объект находится в куче. Компилятор просто найдет свободный блок в куче для хранения вектора. Но что произойдет, если объект будет выделен в стеке, поскольку я продолжаю толкать новые элементы в вектор? Будет ли достаточно места для памяти? Если нет, как бы компилятор нашел достаточно большой блок памяти в стеке для хранения вектора, когда размер вектора может измениться?

+3

Great начинающих вопрос, и хорошо сказал. –

ответ

10

Ввод объекта vector в стек не означает, что он поместит его элементы в стек. Проверить документацию:

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

От: http://www.cplusplus.com/reference/vector/vector/

+1

Да. В стек находится только вектор «обертка». Внутри он, вероятно, просто содержит указатель. Было бы иначе, если бы это был массив, где размер массива должен оставаться фиксированным именно из-за проблем, которые вы задаете. –

Смежные вопросы