захват ресурсов из кучи статической переменной в функции(с++)
есть такая строчка кода в функции:
static int* criterion_table = new int[length];
меня интересует как освобождаются данные захваченные из кучи (делается ли это автоматически по завершении программы или же нужно как то самому), и безопасно ли надеяться, что инициализация данных на куче всегда происходит нулями или же это зависит от компилятора
Ответы (1 шт):
как освобождаются данные захваченные из кучи
Данные освобождаются когда что-то делает
delete[] criterion_table;
Можно сделать и через другую переменную, если она содержит тот же указатель.
В остальных случаях они не освобождаются.
Впрочем, учитывая, что это статический указатель, который инициализируется единожды, я не уверен, что есть смысл его освобождать.
делается ли это автоматически по завершении программы
Программа этого не дает, однако ОС выделяет каждой программе собственное адресное пространство, а это означает, что после завершения программы она уже никакую память не потребляет.
По крайней мере это верно, если ты не пишешь под какую-то экзотику, где программы имеют общее адресное пространство и (возможно) используется невытесняющая многозадачность.
чем инициализируются эти данные
Мусором. static почистил бы сам указатель без инициализации, но на данные, выделенные через new он никак не влияет.
а как мне тогда в таком случае проинициализировать все захваченные статической переменной данные нулем?
Добавь круглые скобки:
static int *criterion_table = new int[length]();
В этом ответе говорится, что так получатся нули.