получит свой собственный кусочек из стека, и он будет освобожден, когда функция вернется (обычно это вызывающая сторона, но это деталь реализации). Последовательные вызовы одной и той же функции должны повторно использовать один и тот же фрагмент стека. Вы добавили какой-либо код в тест? Какой компилятор вы используете? Код выше показывает ожидаемые результаты в 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
Это поведение компилятора? Я не собираюсь на это полагаться, но мне любопытно узнать, почему это происходит, особенно для третьего случая.