Возможно, есть один и тот же вопрос, но я его не нашел.
У меня есть следующий код:
class MBase {
public:
~MBase() { cout << "Base destructor\n" << endl; }
};
class MF: public MBase {
public:
~MF() { cout << "MF Destructor" << endl; }
};
class MS: public MBase {
public:
~MS() { cout << "MS Destructor" << endl;}
};
int main() {
unique_ptr<MBase> ptr1 = unique_ptr<MF>(new MF());
unique_ptr<MBase> ptr2 = unique_ptr<MS>(new MS());
return 0;
}
И есть выход
Base destructor
Base destructor
Разве это не правильно? Почему производные деструкторы не назывались? Что я должен сделать, чтобы исправить это?
Полиморфизм в C++ требует виртуального деструктора, так что можно было бы удалить экземпляр производного класса с помощью указателя на объект базового класса.
Long story short - allways объявляет деструкторы виртуальными, если класс должен быть получен.
при использовании полиморфизма и наследования в C++ у вас должен быть виртуальный деструктор