Ваш код очень рискованный.Вы создаете локальную переменную (которая считается уничтоженной после завершения функции), и вы возвращаете адрес памяти этой переменной после ее удаления.
Это означает, что адрес памяти может быть действительным или нет, и ваш кодбудет уязвимым для возможных проблем с адресом памяти (например, ошибка сегментации).
Это означает, что вы делаете очень плохую вещь, потому что вы передаете адрес памяти указателю, который вообще не заслуживает доверия.
Вместо этого рассмотрите этот пример и протестируйте его:
int * foo()
{
int *x = new int;
*x = 5;
return x;
}
int main()
{
int* p = foo();
std::cout << *p << "\n"; //better to put a new-line in the output, IMO
*p = 8;
std::cout << *p;
delete p;
return 0;
}
В отличие от вашего примера, с этим примером вы:
- выделяете память для int влокальная функция
- , что адрес памяти остается в силе и по истечении срока действия функции (никто не удаляется)
- адрес памяти является надежным (этот блок памяти не считается свободным, поэтому он будетне переопределять, пока он не будет удален)
- адрес памяти должен быть удален, если он не используется.(см. удаление в конце программы)