Что означает предупреждение «имеет виртуальный метод… но не виртуальный деструктор» во время компиляции 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 destructor

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

[РЕДАКТИРОВАТЬ] эта версия теперь верна? (Пытаюсь дать ответ, чтобы прояснить себе эту концепцию)

#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(){}
  };
39
задан qazwsx 6 January 2012 в 22:13
поделиться