Как выделяется и удаляется при вызове 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 шт):
Так как вы возвращаете временный объект, срок действия этого объекта заканчивается после окончания выражения, содержащую данную функцию.
int z = sum(sum(1,2)/* А */ , sum(3,4)/* Б */)/* В */;
Возвращаемые значения А ,Б и В имеют рабочую область жизни при сложении друг друга, и при присваивании результата переменной z. Заканчивается после точки с запятой (окончании выражения).
При конце жизни этих временных объектов происходит вызов их деструкторов. Они имеют область хранения автоматическими, а это значит, что в зависимости от настроек компилятора они могут храниться в регистрах или в стеке или на усмотрение архитектуры. Так как в вашем примере объекты очень простые типа int, то они могут не иметь место в памяти, а будут храниться только в регистрах процессора. Деструктора у типа int нет.