[C con Clase] duda destructores

Davidson, Steven srd4121 en njit.edu
Mie Ene 9 23:49:45 CET 2013


Hola Omar,

2013/1/9 omar mendoza <omar.p9 en gmail.com>

[CORTE]

y después en main,cpp tengo que
>
> #include "claseB.cpp"
>
> int main(int argc, const char *argv[]) {
>
>     claseA *ca = new claseB(1,2);
>     if (ca != NULL) {
>       delete ca;
>       ca = NULL;
>     }
>   return 0;
> }
>
>
> pero resulta que no se ejecuta el destructor de la claseB. En este ejemplo
> no creo memoria dinámica con new en claseB, pero si lo hiciera
> se perdería y no podría liberarla...
> Cómo podría resolver éste problema??
>
>
El problema es que no estás usando objetos polimórficos. Tienes herencia,
pero no polimorfismo. La solución es declarando el destructor en la clase
'A' como virtual. Esto es,

class claseA
{
protected:
  int num;

public:
  virtual ~claseA()  { ... }
};

Sugiero que indiques 'virtual' para las funciones miembro de las clases
derivadas; así se entiende mejor que se trata de clases polimórficas.


Espero haber aclarado la duda.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130109/b6f5a847/attachment-0001.html>


Más información sobre la lista de distribución Cconclase