C++ “Virtual functions but no virtual destructors”

You need to also define the virtual destructor, not only add it.

//Media.h
class Media{
    //....
    virtual ~Media() = 0;
};

//Media.cpp
#include "Media.h"
//....
Media::~Media() {};

The reason you get the warnings is that all classes that will be derived from should have a virtual or protected (credit @Steve) destructor, otherwise deleting an instance via a pointer to a base class results in undefined behavior.

Note you HAVE TO provide a definition for destructors, even if they are pure virtual.

Leave a Comment