Если я объявлю std::vector<A *>
где будет выделяться память? я знаю new
динамически распределяет память, но память для вектора должна выделяться статически. Я хочу знать, что происходит с памятью.
typedef std::vector<A *> AArray;
void myFunction()
{
AArray aarray;
aarray.push_back(new A());
aarray.push_back(new A());
}
AArray aarray;
выделит память в стеке для вашего вектора.
aarray.push_back(new A());
Построим A
в куче, а затем верните указатель на него, который будет помещен в ваш контейнер.
std::vector
должен иметь возможность изменять свои выделенные данные, что означает, что он будет хранить выделенный массив (в данном случае (A *) []) внутри. Этот массив будет размещен в куче (динамически).
Это приведет к утечке памяти каждый раз myFunction()
называется. Переменная aarray
является локальным для myFunction()
и распределяется статически, следовательно, он уничтожается, как только управление возвращается из функции. Тем не менее, два объекта класса A
создаются динамически и не уничтожаются автоматически C ++. Вы должны использовать delete
удалить эти объекты. Вы не удалили объекты в своем коде, поэтому эти два объекта останутся без ссылок в памяти, что приведет к утечке памяти.