Considere el siguiente fragmento de código:¿Dónde asigna un std :: vector su memoria?
#include <vector>
using namespace std;
void sub(vector<int>& vec) {
vec.push_back(5);
}
int main() {
vector<int> vec(4,0);
sub(vec);
return 0;
}
Asumiendo "vec" no queda espacio para almacenar el 5 en la función de "sub", ¿de dónde asignar nueva memoria?
¿En el marco de pila de la función secundaria? En ese caso, el 5 se eliminará al final de la función secundaria. Pero el marco de pila de la función principal no puede crecer, ya que el marco de pila de la función secundaria se encuentra en la parte superior de la pila en ese momento.
¿Un std :: vector asigna memoria para sus elementos en el montón? Pero, ¿cómo libera esa memoria de montón? Si se trata de un vector local en la pila, el marco de pila de una función que incluye el vector se elimina al final sin indicar al vector que se eliminará.
Es posible que desee ver los asignadores de STL. – pmdj
'sub (vector & vec)' llamado como 'sub (vec)' sería definitivamente más fácil de leer;) –
LihO
** Asigna memoria en Heap ** [std :: vector Implementation] (http: // codereview .stackexchange.com/questions/60484/stl-vector-implementation) –