УД
Урфин Джус

Cpp. Как очищается память в функциях?

Я привык, что чисткой памяти занимается GС. А тут надо написать библиотеку на Cpp. От сюда базовые вопросы:

Как себя ведет память в функции:
Например я могу инициализировать переменную с помощью поинтера. Выделить, потом попользоваться и удалить. Догадываюсь, что так выделенная, под переменную, память очиститься:
void TestFunc(){
int *pInt = new int(123);

delete(pInt);
}

А могу это сделать без поинтера:
void TestFunc(){
int vInt = 123;
}

Как повет себя память во втором случае, когда она выделяется? Когда она очищается? Или не очищается вовсе?

СП
Сергей Пируев

Память, автоматически выделенная под объекты внутри блока, выделятся в стеке и освобождается с выходом из блока (т. е. на закрывающей фигурной скобке) . Утечки возможны только с памятью, выделенной по new или malloc (второе в С++ нежелательно использовать) . Если передать указатель на внутреннюю переменную функции, то это будет UB, но не утечка (хотя утечка тут лучше) .
Мой совет - аккуратно пиши деструкторы.

Похожие вопросы
Как скомпилировать из *.cpp в *.jar?
Linux. как собрать *.cpp в *.exe???
Как скомпилировать cpp в dll?
Почему после закрытия программ оперативная память не очищается? Закрыл всё что можно, а память загружена на 80%...
Вращающийся КУБ DirectX 9.0 Cpp
Dll asm end cpp main...Error
как скомпилировать cpp-файл в один exe-файл
cpp: Как реализовать чтение stdout запущенной внешней программы?
Возможно ли cpp скомпилировать в exe без visual studio?
как передать массив в функцию? Cpp