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

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

    typedef std::vector<A *> AArray;

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

3 ответа

Решение

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

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

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

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

Другие вопросы по тегам