Memoria dinámica

Esta semana hemos visto el uso de memoria dinámica, que básicamente consiste en dominar los operadores new y delete. La potencia de esta aproximación que se aprecia sobre todo en los vectores, de manera que es posible crear vectores cuya longitud varía cuando se ejecuta el programa de una vez a otra:


int main()
{
    int * v;
    int numElementos;
    int total = 0;

    cout << "Introduzca el nº de elementos: ";
    cin >> numElementos;

    v = new(nothrow) int[ numElementos ];

    if ( v == NULL ) {
        cerr << "Sin memoria para " << numElementos << endl;
        exit( -1 );
    }

    for( int i = 0; i < numElementos; ++i) {
        cin >> v[ i ];
        total += v[ i ];
    }

    cout << "La media es: " << total / numElementos << endl;

    cout << "Los valores eran:" << endl;
    for( int i = 0; i < numElementos; ++i) {
        cout << v[ i ] << endl;
    }

    delete[] v;
}


El parámetro nothrow en el operador new indica que new devolverá NULL como valor cuando no haya memoria suficiente para satisfacer la reserva. Si no se pone, lanzará una excepción, concepto que todavía no se ha estudiado.