получит свой собственный кусочек из стека, и он будет освобожден, когда функция вернется (обычно это вызывающая сторона, но это деталь реализации). Последовательные вызовы одной и той же функции должны повторно использовать один и тот же фрагмент стека. Вы добавили какой-либо код в тест? Какой компилятор вы используете? Код выше показывает ожидаемые результаты в g ++.

арт и В книге C ++ говорится, что конструктор по умолчанию для членов типа класса вызывается неявным созданным конструктором по умолчанию, но встроенные типы не инициализируются. Тем не менее, в этой тестовой программе я получаю неожиданные результаты при выделении объекта в куче или при использовании временного объекта:

#include<iostream>


struct Container
{
    int n;
};

int main()
{
    Container c;
    std::cout << "[STACK] Num: " << c.n << std::endl;

    Container *pc = new Container();
    std::cout << "[HEAP]  Num: " << pc->n << std::endl;
    delete pc;

    Container tc = Container();
    std::cout << "[TEMP]  Num: " << tc.n << std::endl;

}

Я получаю этот вывод:

[STACK] Num: -1079504552
[HEAP]  Num: 0
[TEMP]  Num: 0

Это поведение компилятора? Я не собираюсь на это полагаться, но мне любопытно узнать, почему это происходит, особенно для третьего случая.

Ответы на вопрос(2)

Ваш ответ на вопрос