SoloCodigo
Programación General => C/C++ => Visual C++ => Mensaje iniciado por: cremix en Domingo 17 de Mayo de 2009, 18:47
-
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
-
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
-
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->