Решение 1 - динамическое выделение памяти с новыми и удаляемыми
Если вы хотите, чтобы ячейка памяти была доступна после выхода из функции, вы должны распределить ее динамически, используя new
:
int* foo() {
int* p = new int(5); // Get pointer to int with value of 5
return p;
}
Поскольку этот указатель был выделен с помощью new
, он будет стоять до тех пор, пока вы не наберете на нем delete
:
int main() {
int* myPtr = foo();
// Do stuff with myPtr
delete myPtr; // Free it, now that it's no longer needed.
}
Потенциальные проблемы
Когда люди говорят о необходимости сделатьручное управление памятью в C ++, это обычно то, что они имеют в виду.Выяснить, когда вызывать delete
для объекта, может быть сложно, и легко все испортить.
Решение 2 - переменная a
существует даже после выхода из функции, и это то же самое a
каждый раз, когда функция вызывается
Если мы отмечаем a
как статическое, то оноКаждый раз при вызове функции у нее будет один и тот же адрес памяти, и она не будет освобождена:
int* p;
void foo() {
static int a = 5;
p = a;
}
int main() {
foo();
// stuff...
std::cout << *p << '\n'; // Prints 5, unless you modified *p
}
Но почему?
Часто, когда вы даете хороший ответ, это полезночтобы понять, почему спрашивающий хочет что-то сделать.Вы не предоставляете никакой информации о том, почему вы хотите это сделать, поэтому я не знаю, что (конкретно) предложить.