Non-virtual father class destructor
<pre><code>class Person
{
public:
    Person(std::string&amp; name,long id) : name_(name), id_(id) {}
    ~Person() {}
private:
    std::string&amp; name_;
    long id_;
};

class Student : public Person
{
public:
    Student(std::string&amp; name, long id) : Person(name,id) {}
    Student(std::string&amp; name, long id, const std::vector&lt;int*&gt;&amp; courses) : Person(name,id), courses_(courses) {}
    virtual ~Student() {
        std::vector&lt;int*&gt;::iterator it;
        for (it = courses_.begin(); it != courses_.end(); ++it)
        delete (*it);
    }
    const std::vector&lt;int*&gt;&amp; getCourses() const { return courses_; }
private:
    std::vector&lt;int*&gt; courses_;
};

int main(){
    std::string name("Rina");
    std::vector&lt;int*&gt; courses;
    courses.push_back(new int(1345));
    Person* p = new Student(name,37,courses);
    Student* s = (Student*)p;
    std::cout &lt;&lt; (*(s-&gt;getCourses().at(0)));
    delete p;
}
</code></pre>

<p>I understand that the</p>

<pre><code>delete p;
</code></pre>

<p>makes us realize the problem that </p>

<pre><code>~Person()
</code></pre>

<p>is not virtual. 
My question is: why should </p>

<pre><code>~Person() 
</code></pre>

<p>be virtual?</p>
