C ++ unique_ptr и полиморфизм [дубликаты]

0

Возможно, есть один и тот же вопрос, но я его не нашел.

У меня есть следующий код:

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

Разве это не правильно? Почему производные деструкторы не назывались? Что я должен сделать, чтобы исправить это?

  • 2
    виртуальный разрушитель
  • 1
    при использовании полиморфизма и наследования в C ++ у вас должен быть виртуальный деструктор.
Теги:
polymorphism
unique-ptr

2 ответа

0
Лучший ответ

Полиморфизм в C++ требует виртуального деструктора, так что можно было бы удалить экземпляр производного класса с помощью указателя на объект базового класса.

Long story short - allways объявляет деструкторы виртуальными, если класс должен быть получен.

Когда использовать виртуальные деструкторы?

0

при использовании полиморфизма и наследования в C++ у вас должен быть виртуальный деструктор

Ещё вопросы

Сообщество Overcoder
Наверх
Меню