Как выделяется и удаляется при вызове return

Как выделяется память под выражения : return c+sum(2,7) и return(a+b) И когда происходит очистка выделенной памяти?

int sum(int a, int b){
    return(a+b);
}
int main(){
    int c=5;
    return (c+sum(2,7));
}

Ответы (1 шт):

Автор решения: AlexGlebe

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

int z = sum(sum(1,2)/* А */ , sum(3,4)/* Б */)/* В */;

Возвращаемые значения А ,Б и В имеют рабочую область жизни при сложении друг друга, и при присваивании результата переменной z. Заканчивается после точки с запятой (окончании выражения).

При конце жизни этих временных объектов происходит вызов их деструкторов. Они имеют область хранения автоматическими, а это значит, что в зависимости от настроек компилятора они могут храниться в регистрах или в стеке или на усмотрение архитектуры. Так как в вашем примере объекты очень простые типа int, то они могут не иметь место в памяти, а будут храниться только в регистрах процессора. Деструктора у типа int нет.

→ Ссылка