Где будет выделена память в следующем фрагменте кода?

Если я объявлю std::vector<A *>где будет выделяться память? я знаю new динамически распределяет память, но память для вектора должна выделяться статически. Я хочу знать, что происходит с памятью.

    typedef std::vector<A *> AArray;

void myFunction()
{
AArray aarray;
aarray.push_back(new A());
aarray.push_back(new A());
}

0

Решение

AArray aarray; выделит память в стеке для вашего вектора.

aarray.push_back(new A()); Построим A в куче, а затем верните указатель на него, который будет помещен в ваш контейнер.

0

Другие решения

std::vector должен иметь возможность изменять свои выделенные данные, что означает, что он будет хранить выделенный массив (в данном случае (A *) []) внутри. Этот массив будет размещен в куче (динамически).

2

Это приведет к утечке памяти каждый раз myFunction() называется. Переменная aarray является локальным для myFunction() и распределяется статически, следовательно, он уничтожается, как только управление возвращается из функции. Тем не менее, два объекта класса A создаются динамически и не уничтожаются автоматически C ++. Вы должны использовать delete удалить эти объекты. Вы не удалили объекты в своем коде, поэтому эти два объекта останутся без ссылок в памяти, что приведет к утечке памяти.

0
По вопросам рекламы [email protected]