Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ejecución del destructor...

Estas en el tema de Ejecución del destructor... en el foro de C/C++ en Foros del Web. Buenas tardes amigos, hace algún tiempo que dejé de estudiar C++, y lo he vuelto a retomar, pero con muchas dudas en todos los aspectos. ...
  #1 (permalink)  
Antiguo 05/11/2010, 11:12
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Pregunta Ejecución del destructor...

Buenas tardes amigos,

hace algún tiempo que dejé de estudiar C++, y lo he vuelto a retomar, pero con muchas dudas en todos los aspectos. Sin embargo, las estoy logrando resolver poco a poco. Pero tengo una duda que no se cómo resolver.

Tengo una clase Cliente, cuyos ficheros *.hpp y *.cpp son los siguientes respectivamente:

Código:
#ifndef _CLIENTE_HPP
#define _CLIENTE_HPP

#include <string>
#include "Fecha.hpp"
using namespace std;





class Cliente {
private:
        char *nombre;
        char *apellido;
        const Fecha fechaAlta;
        static int cuenta;                                                      // Al ser STATIC, es común a todos los objetos
        
public:
        Cliente(char *no, char *ap, Fecha f);                                   // Mirar los inicializadores de MdP I
        ~Cliente();
        // Métodos GET y SET
        char *getNombre() const { return nombre; }
        char *getApellido() const { return apellido; }
        Fecha getFecha() const { return fechaAlta; }
        static int obtenerCuenta() { return cuenta; }
        void setNombre(char *no);                                               // Usar el "length"
        void setApellido(char *ap);
        // Otros métodos
        string cadena() const;
};

#endif
Código:
#include <iostream>
#include <string>
#include <sstream>
#include "Cliente.hpp"
#include "Fecha.hpp"
using namespace std;

int Cliente::cuenta = 0;



Cliente::Cliente(char *no, char *ap, Fecha f) : fechaAlta(f) {
        nombre = new char[strlen(no)+1];                                        // Reservo memoria para el nuevo nombre
        strcpy(nombre, no);                                                     // Copio el nombre
        apellido = new char[strlen(ap)+1];
        strcpy(apellido, ap);
        cuenta++;
}

Cliente::~Cliente() {
        cout << "Destructor de Cliente.\n";
}

// ...
Como podéis ver, en la clase llamo a otra clase Fecha, donde tengo también mis atributos y métodos, entre ellos un destructor cuyo código en el *.cpp es el siguiente:
Código:
Fecha::~Fecha() {
        cout << "Destructor de Fecha.\n";
}
El problema está en que cuando hago cualquier cosa relacionada con una fecha en la clase Cliente, salta el destructor de Fecha. Por ejemplo, ejecutando la siguiente línea en el main, me salta el destructor de Fecha:
Código:
Fecha f1;          // f1, por defecto tomará 1/1/1900
Cliente *p = new Cliente("Susana", "Lopez", f1);
Sin embargo, si comento la línea de creación del cliente, no me salta el destructor de Fecha. ¿A qué puede ser debido?

Un saludo, y muchas gracias.
  #2 (permalink)  
Antiguo 05/11/2010, 16:34
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Ejecución del destructor...

la respuesta es sencilla cuando tu pasas un objecto este automaticamente manda a llamar a un contructor por copia, y finamente cuando cuado sale de la funcion el objecto se destruye y es cuando manda a llamar el destructor.
  #3 (permalink)  
Antiguo 06/11/2010, 11:14
Isdiar
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ejecución del destructor...

Gracias "margatito04" por tu respuesta.
¿Y esto debe ser así?

Gracias! :)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:04.