No entiendo el objetivo de la memoria dinámicamente asignada y espero que ustedes puedan aclarar las cosas.C++ memoria asignada dinámicamente
En primer lugar, cada vez que asignamos memoria, simplemente obtenemos un puntero a esa memoria.
int * dynInt = new int;
Entonces, ¿cuál es la diferencia entre hacer lo que hice arriba y:
int someInt;
int* dynInt = &someInt;
Según entiendo, en ambos casos se asigna memoria para un int, y obtenemos un puntero a la memoria.
¿Cuál es la diferencia entre los dos? ¿Cuándo se prefiere un método al otro?
Más aún ¿por qué necesito para liberar memoria con
delete dynInt;
en el primer caso, pero no en el segundo caso.
Mis conjeturas son:
Cuando la asignación dinámica de memoria para un objeto, el objeto no quede inicializado mientras que si haces algo como en el segundo caso, el objeto Get de inicializado. Si esta es la única diferencia, ¿hay alguna motivación detrás de esto aparte del hecho de que la asignación dinámica de memoria es más rápida.
La razón por la que no necesitamos usar eliminar para el segundo caso se debe a que el hecho de que el objeto se haya inicializado crea algún tipo de rutina de destrucción automática.
Esas son solo conjeturas me encantaría que alguien me corrigiera y me aclarara las cosas.
Si no está seguro, siga la regla simple: "Nunca use punteros, nunca use' new'. " Una vez que comprenda la necesidad de la vida útil de los objetos administrados manualmente, sabrá cuándo romper esta regla. –
Uhm, le recomiendo encarecidamente que abra un libro sobre C++. El alcance variable, la gestión dinámica de la memoria se suelen analizar en el capítulo 4 o 5 de cualquier libro para principiantes en C++. @KerrekSB No diría eso. Especialmente en este caso, la incertidumbre no proviene de la ambigüedad, sino de la falta de conocimiento. Si no está seguro, asegúrese de leer lo suficiente para estar seguro. – paul23
La asignación dinámica de memoria es usualmente _slower_, y la inicialización no tiene nada que ver con nada de esto. –