Cita:
Iniciado por Doommarine_Maxi Al utilizar new, ¿Simplemente se reserva más espacio en la memoria sin afectar a los datos que hay en ella?, es decir, ¿Todos los datos que hay en "cad" siguen intactos con la diferencía que ahora tengo más espació en los arrays verdad?, ¿como un "realloc"?.
Otra cosa, delete [], lo que hace es eliminar la reserva de espació en la memoria y new genera nueva reserva de espació en la memoria dinamica... ¿Todo sin afectar a los datos que había en esos espacios de memoria verdad?.
Simplemente tengo esa duda al ver que usaste delete, luego new y luego concatenaste a cad
No haber, el sistema de memoria es más sencillo que eso. Digamos que sería un malloc simplificado.
El operador new le pide al sistema operativo que le reserve memoria. Si la petición es aceptada, obtienes la dirreción donde se encuentra tu memoria reservada.
De modo que:
Código C++:
Ver originalchar* Ejemplo; // puntero
Ejemplo = new char[10]; //Pido al sistema operativo 10 bytes
Ejemplo = new char[15]; // Vuelvo a pedirle el sistema operativo 15 bytes, obtengo otra dirreción diferente
Esto es un error grave, puesto que ahora mismo tenemos reservada 25 bytes de memoria pero solo tenemos la dirreción de los ultimos 15 bytes, los otros 10 bytes son "memoria perdida" (al sistema operativo le consta como reservada pero como no tenemos su dirreción no podemos usarla).
Si además tenemos datos importantes en esos 10 bytes, también los perderemos (new no maneja los datos, simplemente pide memoria al SO y te devuelve su dirreción).
Por eso en el código, he usado primero delete[] para liberar la memoria anterior y despues he hecho una nueva petición... Aunque ahora que me doy cuenta, se me ha olvidado guardar los datos antes (en una cadena auxiliar por ejemplo).
La verdad esque si voy a redimensionar en tiempo de ejecución. No usaría el delete/new sino la clase vector. Su sintaxis es:
Código C++:
Ver originalvector<tipo> nombre; // Declaración del vector
nombre.push_back(elemento); // Añadir un elemento al vector
Ejemplo:
Código C++:
Ver original#include <vector>
//...
vector<int> Numeros; // Vector de enteros
int Buffer;
cout<<"Introduzca elementos hasta que encuentre el cero";
do
{
cin>> Buffer;
nombre.push_back(Buffer); // añado el numero al vector
} while (Buffer != 0);
// Los muestro por pantalla
for (int i = 0; i < Numeros.size();i++) // Numeros.size() devuelve el tamaño del vector
cout<<Numeros[i];
Numeros.resize(5); // Modificamos el tamaño del vector, si el vector es más pequeño que cinco se añadirán elementos nulos, en caso contrario se suprimirán los ultimos elementos.
vector<int> Cosa;
Cosa = Numeros; // operador = sobrecargado
Cosa.pop_back(); // Eliminando el ultimo elemento
if (Numeros > Cosa) // Operador > sobrecargado
cout<<"Hecho";
Para más información:
http://www.cplusplus.com/reference/vector/vector/