Что означает предупреждение «имеет виртуальный метод… но не виртуальный деструктор» во время компиляции C ++?

#include <iostream>
using namespace std;

class CPolygon {
  protected:
    int width, height;
  public:
    virtual int area ()
      { return (0); }
  };

class CRectangle: public CPolygon {
  public:
    int area () { return (width * height); }
  };

Имеет предупреждение компиляции

Class '[C@1a9e0f7' has virtual method 'area' but non-virtual destruct,or

Как понять это предупреждение и как улучшить код?

[EDIT] эта версия сейчас верна? (Пытаюсь дать ответ, чтобы прояснить суть концепции)

#include <iostream>
using namespace std;

class CPolygon {
  protected:
    int width, height;
  public:
    virtual ~CPolygon(){};
    virtual int area ()
      { return (0); }
  };

class CRectangle: public CPolygon {
  public:
    int area () { return (width * height); }
    ~CRectangle(){}
  };

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

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