захват ресурсов из кучи статической переменной в функции(с++)

есть такая строчка кода в функции:

static int* criterion_table = new int[length];

меня интересует как освобождаются данные захваченные из кучи (делается ли это автоматически по завершении программы или же нужно как то самому), и безопасно ли надеяться, что инициализация данных на куче всегда происходит нулями или же это зависит от компилятора


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

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

как освобождаются данные захваченные из кучи

Данные освобождаются когда что-то делает

delete[] criterion_table;

Можно сделать и через другую переменную, если она содержит тот же указатель.

В остальных случаях они не освобождаются.

Впрочем, учитывая, что это статический указатель, который инициализируется единожды, я не уверен, что есть смысл его освобождать.

делается ли это автоматически по завершении программы

Программа этого не дает, однако ОС выделяет каждой программе собственное адресное пространство, а это означает, что после завершения программы она уже никакую память не потребляет.

По крайней мере это верно, если ты не пишешь под какую-то экзотику, где программы имеют общее адресное пространство и (возможно) используется невытесняющая многозадачность.

чем инициализируются эти данные

Мусором. static почистил бы сам указатель без инициализации, но на данные, выделенные через new он никак не влияет.

а как мне тогда в таком случае проинициализировать все захваченные статической переменной данные нулем?

Добавь круглые скобки:

static int *criterion_table = new int[length]();

В этом ответе говорится, что так получатся нули.

→ Ссылка