Operador New
Enviado por genarin10 • 29 de Mayo de 2013 • 395 Palabras (2 Páginas) • 220 Visitas
El operador new (palabra clave C++) proporciona espacio de almacenamiento persistente, similar pero superior a la función de Librería Estándar malloc. Este operador permite crear un objeto de cualquier tipo, incluyendo tipos definidos por el usuario, y devuelve un puntero (del tipo adecuado) al objeto creado.
Su utilización exige que el usuario declarare un puntero del tipo adecuado; a continuación debe ser inicializado con el valor devuelto por el operador. Si el objeto creado es tipo T, sería algo así (más detalles a continuación ):
T* puntero = valor-devuelto-por-el-operador;
En la expresión
new ClaseC;
el operador new intenta asignar un espacio de tamaño sizeof(ClaseC) en la zona de memoria dinámica ( 2.2.6). A continuación intenta crear en esta posición una instancia de la clase utilizando el constructor adecuado. Como resultado de estas dos operaciones se obtiene la dirección (puntero) del objeto creado. Este puntero devuelto por new es del tipo correcto: puntero-a-ClaseC, sin que se necesaria ninguna conversión de tipo ("casting") explícita.
Aunque el operador tiene algunas limitaciones , puede utilizarse con tipos calificados ( 2.2). Por ejemplo, es válido:
new const ClaseC;
Los objetos creados con new son persistentes, es decir, la vida del nuevo objeto es desde el punto de creación hasta el final del programa o hasta que el programador lo destruya explícitamente con el operador delete ( 4.9.21). Este último desasigna la zona de memoria ocupada por el objeto, de forma que queda disponible para nuevo uso. Las sucesivas invocaciones de este operador van reservando zonas de memoria en el montón para los objetos sucesivamente creados. El gestor de memoria del compilador se encarga de mantener una tabla con los sitios ocupados y libres sin que haya conflictos hasta que la memoria se ha agota, o no existe espacio contiguo suficiente para el nuevo objeto. En cuyo caso se lanza una excepción como indicativo del error .
El operador new puede aceptar un inicializador opcional para que rellene el espacio reservado con el valor suministrado. Sin embargo, su versión para matrices new[ ] no acepta iniciador ( 4.9.20c). En caso de no proporcionarse iniciador, el objeto creado contiene basura.
La persistencia de los objetos creados con new y su independencia del ámbito desde el que han sido creados, es muy importante y de tener en cuenta, pues suele ser motivo de pérdidas de memoria en el programa si olvidamos destruirlos cuando ya no son necesarios
...