Что касается примера кода ниже, почему деструктор для базового класса называется дважды?Вопрос о деструкторах C++
class Base {
public:
Base() {
std::cout << "Base::Base()" << std::endl;
}
~Base() {
std::cout << "Base::~Base()" << std::endl;
}
};
class Derived : public Base {
public:
Derived() {
std::cout << "Derived::Derived()" << std::endl;
}
~Derived() {
std::cout << "Derived::~Derived()" << std::endl;
}
};
int main() {
Base a = Derived();
return EXIT_SUCCESS;
}
Вот пример вывода при выполнении программы:
Base::Base()
Derived::Derived()
Derived::~Derived()
Base::~Base()
Base::~Base()
Исправлено форматирование вашего кода. Первый раз, когда я видел, так сильно испортил форматирование. ;) – jalf
Чтобы узнать, что происходит дальше, добавьте конструктор копирования для Base. Затем вы увидите недостающую конструкцию, связанную с несогласованными деструкторами. –
Да, хороший совет. При тестировании таких вещей всегда проверяйте, что * all * constructors (плюс оператор присваивания) отслеживаются. В противном случае вы можете пропустить половину того, что происходит. – jalf