Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/11/2012, 07:20
OscarMariano
 
Fecha de Ingreso: octubre-2012
Ubicación: Lima
Mensajes: 31
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Duda con los constructores

Cita:
Iniciado por Aemilius Ver Mensaje
Otra forma, usando memoria de pila:

Persona p(8,"asd");

En este caso el destructor seá llamado al final del contexto de p, asi como la memoria utilizada por p será automaticamente liberada (Nada de magia aqui, si reservaste memoria en el heap por tu cuenta para algún miembro puntero de p, tambien tienes que liberarla por tu cuenta). Como es memoria reservada en pila esto es muchísimo más rápido que reservar/liberar memoria en el heap ya que no es necesario ninguna sincronización con otros hilos y prácticamente se traduce en simple suma/resta en lugar de tener que actualizar una lista de zonas de memoria reservadas o libres en el heap. Evidentemente esta forma es menos flexible que usar memoria del heap puesto que el inicio y fin de la vida del objeto están decididos a tiempo de compilación por el contexto de la variable.

Por ejemplo:
Código:
// Usando llaves para definir un inicio/fin de contexto.
{
    // En este punto no existe p

    // Inicio del contexto de p
    Persona p(8,"asd");
    // Logica que usa p

    // Fin del contexto de p, el destructor de p es llamado en este punto
}
// En este punto tampoco existe p
y me podrias decir cual es la diferencia entre estos tipos de declaracion?

Persona *p = new Persona;
Persona *p = new Persona();
__________________
Lo mas curioso en esta vida es que todo se hace mas simple cuando lo divides de 2 en 2.