Назад к вопросам
Middle
83
questionbank

В каком порядке конструируются и разрушаются объекты в C++?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

  1. Статические и глобальные объекты: конструируются до вызова main(), разрушаются после завершения main().
  2. Объекты-члены класса: конструируются в порядке их объявления в классе, разрушаются в обратном порядке при разрушении объекта класса.
  3. Базовые классы: конструируются до производного класса в порядке их указания в списке инициализации базовых классов, разрушаются после производного класса в обратном порядке.
  4. Локальные автоматические объекты (на стеке): конструируются при входе в область видимости, разрушаются при выходе из нее в обратном порядке конструирования.
  5. Объекты, выделенные динамически (на куче): конструируются при вызове 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