Почему мой деструктор никогда не вызывается?

У меня есть базовый класс A и производный класс B:

class A
{
public:
    virtual f();
};

class B : public A
{
public:
     B()
     {
         p = new char [100];
     }
     ~B()
     {
         delete [] p;
     }
     f();
private:
    char *p;
};

По какой-то причине деструктор никогда не называется - почему? Я не понимаю этого.

Ответы на вопрос(4)

Ваш ответ на вопрос