Buenas noches, acabo de notar que cuando creo una memoria dinamica usando new[], no tengo necesidad de usar el encabezado <new>, pero en una pagina de C++ indica que ésta es necesaria para invocar ese metodo: http://www.cplusplus.com/reference/new/ , aqui tienen mi codigo y veran que funciona perfectamente sin la cabecera <new>
#include <iostream>
using namespace std;
int main( int argc, char* args[] )
{
int *arreglo;
int cantidad, i, a = 0;
cout << "Ingrese el tamaño del arreglo: ";
cin >> cantidad;
// El metodo nothrow permite que el programa se siga ejecutando incluso si el puntero recibe un parametro invalido
arreglo = new (nothrow) int [cantidad];
if( arreglo == 0)
cout << "Error, no se pudo asignar memoria" << endl;
else
for( i = 0; i < cantidad; i++ )
{
arreglo[i] = a;
a++;
cout << arreglo[i] << endl;
}
// El operador delete sirve para liberar la memoria dinamica utilizada
delete [] arreglo;
cin.get();
return 0;
}
¿Sera que ya no es necesario usar esa cabecera? Que alguien me explique que diferencia hay entre usarla o no, por favor, gracias.
En la pagina que mencionas se explica porque no es necesaria la inclusión de ese encabezado, por ejemplo en la pagina sobre el operador new (http://www.cplusplus.com/reference/new/operator%20new/):
CitarThe default allocation and deallocation functions are special components of the standard library; They have the following unique properties:
* Global: All three versions of operator new are declared in the global namespace, not within the std namespace.
* Implicit: The allocating versions ((1) and (2)) are implicitly declared in every translation unit of a C++ program, no matter whether header <new> is included or not.
* Replaceable: The allocating versions ((1) and (2)) are also replaceable: A program may provide its own definition that replaces the one provided by default to produce the result described above, or can overload it for specific types.
Un saludo
Muchas gracias, me salte ese pedazo, aunque igual creo que empezare a incluir ese encabezado de manera que se vea mas formal el codigo :)
Cita de: erest0r en 11 Septiembre 2013, 08:22 AM
Muchas gracias, me salte ese pedazo, aunque igual creo que empezare a incluir ese encabezado de manera que se vea mas formal el codigo :)
Dudo que encuentres muchos códigos fuente en los que se incluya la susodicha cabecera.
El operador new está disponible siempre en todo el código fuente y por esa razón no se incluye su cabecera por defecto.
Muchas gracias, si es asi, ¿existe algun otro operador el cual no haya necesidad de incluir su cabecera?
No te preocupes por cosas como estas.
Lo ideal es que solamente añadas un include cuando el compilador te lo pida.
En proyectos pequeños es más o menos fácil saber que includes tienes que añadir en cada archivo... pero conforme el proyecto crece y se van creando dependencias entre archivos la cosa cambia.
Añadir includes innecesarios hace que el código tarde más en compilar y, claro, en proyectos pequeños no se nota... pero va siendo más palpable conforme añades archivos al proyecto.
Gracias de nuevo :)