• Miércoles 15 de Mayo de 2024, 01:27

Autor Tema:  Destruir un objeto  (Leído 1377 veces)

cremix

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Destruir un objeto
« en: Domingo 17 de Mayo de 2009, 18:47 »
0
Hola:

Estoy intentado aprender a destruir objetos y por lo visto veo que hay que crear un puntero al objeto que cree y luego eliminarlo desde el objeto. Creo que he hecho eso pero aún asi el código no me copila. ¿Sabe alguien por qué?

Nodo.h
class Nodo{

protected:
   float salida;
   int size_pesos;
   float* pesos;
   
public:
   
   Nodo(int in_size_pesos, float in_salida);
   ~Nodo();
   void print_pesos();
   void print_salida();

};

Nodo.cpp

(...)

Nodo::Nodo(int in_size_pesos, float in_salida)
{
   size_pesos = in_size_pesos;

   salida = in_salida;

   pesos = new float[in_size_pesos];
   
   for(int i=0;i<size_pesos;i++)
      pesos = static_cast<float> (i*0.1);
}

Nodo::~Nodo()
{
   delete[] pesos;
}

(...)


EntryPoint.cpp

int main()
{
   Nodo node(10,6.0);
   Nodo* ptrNodo = new(Nodo)
   Nodo* p1 = &node; //Me da el fallo aquí

   node.print_salida();
   node.print_pesos();
   delete ptrNodo;
 
        (...)
}

Por cierto, ¿el destructor está bien así? Los atributos que no seas arrays o punteros ¿cómo los elimino?

Muchas gracias

cremix

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Destruir un objeto
« Respuesta #1 en: Domingo 17 de Mayo de 2009, 19:04 »
0
Hola:

Al final lo he solucionado así:

Nodo* node = new Nodo(10,6.0);

node->print_salida();
node->print_pesos();

Muchas gracias de todos modos. Aunque ahora tengo otra cuestión. Si no implemento el destructor, si lo dejo vacío, ¿sigue destruyéndose todo el objeto? Es decir, silo dejo así

Nodo::~Nodo(){ };

Y segundo ¿por qué no puedo llamar ahora a las funciones así?

node.print_salida();
node.print_pesos();

Un saludo y gracias

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Destruir un objeto
« Respuesta #2 en: Domingo 6 de Septiembre de 2009, 00:49 »
0
En el destructor tienes que destruir todos los objetos creados dinámicamente y liberar la memoria reservada dinámicamente por el objeto. ( Con excepción de aquellos objectos que en el momento de la destrucción no son propiedad del objecto que está siendo destruido. )
Si dejas el destructor vacío, o no defines uno, sólo serán destruidos los objetos creados en pila.

Por cierto es recomendable que te acostumbres a definir tus destructores como "virtual", a menos que no tengas pensado usar herencia.

La segunda pregunta: Por que tienes que dereferenciar el puntero asi: (*node). lo que equivale a node->