//virtual-distr.cpp

//Analizzare questo programma.

#include <iostream.h>

class B
{ public:
    B() { vettb = new int[100]; }
    ~B() { delete[] vettb; }
  private:
    int* vettb;
};


class D : public B
{ public:
    D() { vettd = new int[200]; }
    ~D() { delete[] vettd; }
  private:
    int* vettd;
};


void main()
{
  // ...
  B* p = new D;  //OK perche' la derivazione e' pubblica.
  delete p;      //Attenzione chiama B::~B().
                 //Non dealloca p->vettd!!!
  // ...
}

//Dom: Come posso ovviare al problema?
//Ris: Devo definire B::~B() come virtual.
