Вызов деструктора - PullRequest
       1

Вызов деструктора

0 голосов
/ 28 октября 2018

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

class A
{
    public:
    ~A() { cout << "A"; }

};

class B
{
    public:
        ~B() { cout << "B"; }
};


int main()
{
    A a;
    B b;

    return 0;
}

Вывод выглядит так:

BA

Может кто-нибудь объяснить, почему вывод выглядит так?

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

Объектам в функции выделяется память в куче, если они создаются с использованием ключевого слова new. Динамическая память

Объектам в функции выделяется память в стеке (хотяc ++ не требует использования стека), если они не созданы с использованием нового ключевого слова.

int main( )
{
    A a;
    B b;
} 

В приведенном выше случае B находится сверху A. Следовательно, он уничтожается первым после завершения функции.Мы вызываем деструктор, чтобы уничтожить выделение памяти. подробнее

Дополнительный ресурс: аналогичный вопрос

0 голосов
/ 28 октября 2018

Очистка мифа в других ответах: нет, порядок очистки не имеет ничего общего со стеком.

Стандарт C ++ даже не определяет концепцию стека, за исключением двух обстоятельств:

  • разматывание стека (как процесс).
  • адаптер контейнера стека.

Здесь не имеет значения.Что имеет значение , хотя это относится к разделу 6.6:

При выходе из области действия (хотя и выполненной) объекты с автоматической продолжительностью хранения, созданные в этой области, уничтожаются в обратном порядке их построения .

Передача из цикла, из блока или обратно после инициализированной переменной с автоматическим сроком хранения включает уничтожение объектов с автоматическим сроком хранения, которые находятся вобласть видимости в точке, переданной, но не в точке, переданной.

Тот факт, что большинство архитектур реализуют это поведение с использованием стека выполнения, является «счастливым совпадением», но оно не предписано стандартом.

С другой стороны, уничтожение в обратном порядке гарантируется независимо от того, будет ли реализация использовать стек или нет.

0 голосов
/ 28 октября 2018

Объекты уничтожаются в порядке, обратном их созданию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...