Назад к вопросам
Middle
83
questionbank
В каком порядке конструируются и разрушаются объекты в C++?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
- Статические и глобальные объекты: конструируются до вызова
main(), разрушаются после завершенияmain(). - Объекты-члены класса: конструируются в порядке их объявления в классе, разрушаются в обратном порядке при разрушении объекта класса.
- Базовые классы: конструируются до производного класса в порядке их указания в списке инициализации базовых классов, разрушаются после производного класса в обратном порядке.
- Локальные автоматические объекты (на стеке): конструируются при входе в область видимости, разрушаются при выходе из нее в обратном порядке конструирования.
- Объекты, выделенные динамически (на куче): конструируются при вызове
new, разрушаются при вызовеdelete. Порядок определяется порядкомnewиdelete.
Пример:
#include <iostream>
class Base {
public:
Base() { std::cout << "Base constructed\n"; }
~Base() { std::cout << "Base destructed\n"; }
};
class Member {
public:
Member() { std::cout << "Member constructed\n"; }
~Member() { std::cout << "Member destructed\n"; }
};
class Derived : public Base {
Member m;
public:
Derived() { std::cout << "Derived constructed\n"; }
~Derived() { std::cout << "Derived destructed\n"; }
};
int main() {
std::cout << "Entering main\n";
{
Derived d; // Конструирование Base -> Member -> Derived
} // Разрушение Derived -> Member -> Base
std::cout << "Exiting main\n";
return 0;
}
Вывод программы будет следующим:
Entering main
Base constructed
Member constructed
Derived constructed
Derived destructed
Member destructed
Base destructed
Exiting main