Живет ли динамическая переменная за функией?

Я начал изучать динамическое выделение памяти, в первую очередь я разобрался с динамическими массивами, с ними все ясно, их мы используем например когда заранее размер не известен. Но я заинтересовался динамическими переменными(а не массивами), посмотрел в интернете и нашел такую вещь:

void foo() {
 int variable = 5; //lives only in function
 int *dVariable = new int(5); //lives outside function

}

И на многих сайтах приводят именно этот пример, но я не понимаю как же это переменная живет вне функции? я попробовал сделать тоже самое, и попытался обратиться к переменной dVariable вне функции(например в main) естественно получаю ошибку, объясните пожалуйста как же все таки к ней обратиться если она живет вне функции? Или я просто неправильно понимаю слово "Живет вне функции"?


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

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

Не

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.

Так стало понятнее?

→ Ссылка