Duda sobre memoria dinamica C++

Iniciado por erest0r, 11 Septiembre 2013, 06:25 AM

0 Miembros y 1 Visitante están viendo este tema.

erest0r

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>

Código (cpp) [Seleccionar]

#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.
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.

rir3760

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:
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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

erest0r

Muchas gracias, me salte ese pedazo, aunque igual creo que empezare a incluir ese encabezado de manera que se vea mas formal el codigo  :)
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.

eferion

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.

erest0r

Muchas gracias, si es asi, ¿existe algun otro operador el cual no haya necesidad de incluir su cabecera?
Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.

eferion

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.

erest0r

Cruzar la calle junto a mucha gente cuando el semáforo sigue en rojo da seguridad y espíritu de equipo... o cruzamos todos o morimos juntos.