Una de las características fundamentales de la agregación según varios autores es la diferencia en el ciclo de vida del objeto agregado y el objeto que lo agrega. Ahora bien, encuentro distintas implementaciones en C++. En ninguna de las implementaciones se ve claramente que la clase agregada siga viva luego de la destrucción de la clase agregadora.
En el siguiente código cree una clase llamada agregación que contiene como miembro un puntero a un entero. En el main() le reserve memoria a dicho entero, le hice que el miembro de mi clase apunte a esa dirección. Al hacer un delete, continuo pudiendo acceder al objeto.
#include <iostream>
#include "Agregacion.h"
using namespace std;
class Agregacion
{
public:
Agregacion();
void setNumero(int);
int getNumero();
virtual ~Agregacion();
protected:
private:
int *numero;
}
int main()
{
int* numero_main;
numero_main = new int;
*numero_main = 10;
Agregacion* num;
num = new Agregacion;
num->setNumero(numero_main);
cout << "Imprimiendo num.getNumero(): ";
cout << num->getNumero() << endl;
cout << "Imprimiendo numero_main: ";
cout << *numero_main << endl;
delete num;
cout << "Imprimiendo num.getNumero(): ";
cout << num->getNumero() << endl;
cout << "Imprimiendo numero_main: ";
cout << *numero_main << endl;
return 0;
}
y los metodos basicos:
Agregacion::Agregacion()
{
//ctor
}
Agregacion::~Agregacion()
{
//dtor
}
void Agregacion::setNumero(int* a)
{
numero = a;
}
int Agregacion::getNumero()
{
return *numero;
}
Por que sucede esto? Cual seria la correcta implementacion para demostrar la diferencia entre los ciclos de vida? Muchas gracias.