Данил Asked:2024-10-04 03:40:03 +0000 UTC2024-10-04 03:40:03 +0000 UTC 2024-10-04 03:40:03 +0000 UTC 从函数中的静态变量堆获取资源 (C++) 772 函数中有这样一行代码: static int* criterion_table = new int[length]; 我感兴趣的是如何释放从堆捕获的数据(这是在程序结束时自动完成的还是有必要自己执行),并且希望堆上数据的初始化始终发生是否安全?零还是取决于编译器 c++ 1 个回答 Voted Best Answer Qwertiy 2024-10-04T03:55:38Z2024-10-04T03:55:38Z 如何释放从堆中捕获的数据 当某事完成时数据被释放 delete[] criterion_table; 如果另一个变量包含相同的指针,也可以通过它来完成。 在其他情况下,它们不会被释放。 然而,鉴于这是一个初始化一次的静态指针,我不确定释放它是否有意义。 这是在程序结束时自动完成的吗? 程序不提供这个,但是操作系统为每个程序分配了自己的地址空间,这意味着程序终止后,它不再消耗任何内存。 至少,如果您不是为某种奇异的东西而编写,其中程序具有公共地址空间并且(可能)使用非抢占式多任务处理,那么这是正确的。 这些数据是如何初始化的 垃圾。 static 会在不初始化的情况下清除指针本身,但它对通过 new 分配的数据没有影响。 但是如何才能将静态变量捕获的所有数据初始化为零呢? 添加括号: static int *criterion_table = new int[length](); 这个答案说这将导致零。
当某事完成时数据被释放
如果另一个变量包含相同的指针,也可以通过它来完成。
在其他情况下,它们不会被释放。
然而,鉴于这是一个初始化一次的静态指针,我不确定释放它是否有意义。
程序不提供这个,但是操作系统为每个程序分配了自己的地址空间,这意味着程序终止后,它不再消耗任何内存。
至少,如果您不是为某种奇异的东西而编写,其中程序具有公共地址空间并且(可能)使用非抢占式多任务处理,那么这是正确的。
垃圾。 static 会在不初始化的情况下清除指针本身,但它对通过 new 分配的数据没有影响。
添加括号:
这个答案说这将导致零。