2011-02-14 13 views
6

Si delete un puntero de la siguiente manera, por ejemplo:¿Qué le sucede a una dirección después de que se le haya aplicado el operador delete en C++?

delete myPointer; 

Y, después de eso hicieron no asignar 0 al puntero de la siguiente manera:

myPointer = 0; //skipped this 

Will myPointer estar apuntando a otra dirección de memoria ?

+4

@ user588855: la asignación de '0' a un puntero * deleted * es un tema controvertido, dependiendo de la situación, ya que podría ocultar errores estructurales en el manejo de flujo/memoria. Es mejor usar punteros/contenedores inteligentes y no tener que llamar 'borrar' en absoluto. –

Respuesta

5

myPointer apunta a la misma dirección de memoria. Pero, no sería válido para usted usar la memoria en esa dirección porque delete la habría devuelto al sistema operativo/en tiempo de ejecución, y el sistema operativo habría asignado esa memoria para que la use otra persona.

+0

Entonces, ¿qué es probable que pueda usar el puntero * deleted * con la misma dirección a la que apuntaba (asignación)? ¿Es * inmediatamente * que una vez que el puntero * se borra * se devuelve al SO por ejemplo o por alguna otra cosa? – Simplicity

+3

@ user588855: Tal vez se devuelve al sistema operativo, tal vez no, tal vez algún otro código (en otro hilo) pide memoria y obtiene memoria en esa dirección. Pase lo que pase, será muy doloroso para ti, no lo hagas, utiliza los punteros y la asignación dinámica de memoria de forma adecuada. – sharptooth

+0

El puntero nunca se devuelve al sistema operativo. En cambio, el bloque de memoria al que apunta el puntero se devuelve al sistema operativo. No elimina los punteros, elimina la memoria a la que apunta el puntero –

3

Definitivamente, no. La operación delete no cambia el puntero en sí; libera la memoria dirigida por ese puntero.

+0

'delete x' puede cambiar el valor de' x': http://stackoverflow.com/questions/5002055/is-the-pointer- guaranteed-to-preserve-its-value-after-delete-in-c/5002201 # 5002201 –

Cuestiones relacionadas