В C++, как функция обрабатывает память, динамически распределяемую при выходе из области действия? Удалена ли эта память или ее можно вернуть обратно в основной блок?Выполняет функцию очистки динамической памяти при выходе из области?
В контексте: У меня есть функция, и я передаю ей указатель на двойной, чтобы служить в качестве массива. Я динамически выделяю эту память внутри функции, инициализирую элементы и выхожу из функции.
void my_func(double* ptr){
ptr = new double[2];
ptr[0] = 15; ptr[1] = 10;
}
В основном блоке я использую вновь выделенный массив.
Будет ли это работать? Существуют ли опасения/подводные камни, связанные с этим подходом?
Очень информативный ответ! Спасибо :-) – Xahdoom
'поэтому, пока вы можете изменить (как определено стандартами), содержимое указателя указывает на' - true, только когда указателю уже выделена некоторая память.В этом случае 'ptr = new double [2]' заставит указатель 'ptr' указывать на законно распределенную память, и на этом этапе конец ptr (в основном) на ptr (в функции) заканчивается. – sjsam