Живет ли динамическая переменная за функией?
Я начал изучать динамическое выделение памяти, в первую очередь я разобрался с динамическими массивами, с ними все ясно, их мы используем например когда заранее размер не известен. Но я заинтересовался динамическими переменными(а не массивами), посмотрел в интернете и нашел такую вещь:
void foo() {
int variable = 5; //lives only in function
int *dVariable = new int(5); //lives outside function
}
И на многих сайтах приводят именно этот пример, но я не понимаю как же это переменная живет вне функции? я попробовал сделать тоже самое, и попытался обратиться к переменной dVariable вне функции(например в main) естественно получаю ошибку, объясните пожалуйста как же все таки к ней обратиться если она живет вне функции? Или я просто неправильно понимаю слово "Живет вне функции"?
Ответы (1 шт):
Не
int dVariable = new int(5);
а
int *dVariable = new int(5);
Если вы вернете указатель из функции - то эта память будет доступна и далее. Например,
int * foo()
{
int * ptr = new int(5);
return ptr;
}
.....
int * v = foo();
cout << *v << endl;
будет выведена ваша пятерка. Память остается выделенной, пока вы где-то (возможно, в очень далеком месте) не освободите ее с помощью delete.
Так стало понятнее?