Cita:
Iniciado por Aemilius 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();