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:
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:#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"; } // ...
Código:
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:Fecha::~Fecha() { cout << "Destructor de Fecha.\n"; }
Código:
Sin embargo, si comento la línea de creación del cliente, no me salta el destructor de Fecha. ¿A qué puede ser debido?Fecha f1; // f1, por defecto tomará 1/1/1900 Cliente *p = new Cliente("Susana", "Lopez", f1);
Un saludo, y muchas gracias.