Я определил интерфейс в C ++, то есть класс, содержащий только чисто виртуальные функции.
Я хочу явно запретить пользователям интерфейса удалять объект через указатель на интерфейс, поэтому я объявил защищенный и не виртуальный деструктор для интерфейса, что-то вроде:
class ITest{
public:
virtual void doSomething() = 0;
protected:
~ITest(){}
};
void someFunction(ITest * test){
test->doSomething(); // ok
// deleting object is not allowed
// delete test;
}
Компилятор GNU выдает мне предупреждение:
класс 'ITest' имеет виртуальные функции, но не виртуальный деструктор
Как только деструктор защищен, какая разница в том, виртуален он или не виртуален?
Как вы думаете, это предупреждение можно безопасно игнорировать или отключить?