main例如,在我的C++ 函数中,如果我有一个指向使用堆内存的变量的指针(而不是堆栈内存) - 在我的应用程序退出后会自动解除分配吗?我会这么认为.
即便如此,即使您认为永远不会在退出时自动释放内存的情况下使用堆分配,也总是删除堆分配是一种好习惯吗?
例如,这样做有什么意义吗?
int main(...)
{
A* a = new A();
a->DoSomething();
delete a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想也许以防我重构(或其他人重构)代码并将其放在应用程序的其他地方,这delete真的是必要的.
除了Brian R. Bondy(其中特别谈到C++中的含义)的答案之外,Paul Tomblin 对C特定问题也有一个很好的答案,该问题也讨论了C++析构函数.
我知道清理是件好事.我也理解操作系统内部,所以如果我知道我的进程正在终止,那么它的内存将被释放.但我想提出不同的观点.我觉得在退出时释放内存是相当不错的想法.
例如,我可能已经分配了当前换出的大内存,如果我在退出时释放它,则需要将其带到RAM,然后释放它.如果我不这样做,退出时只需在一张桌子上标记为免费.
总的来说,操作系统已经发生了很大的变化(基础知识保持不变),我理解这个问题可以被认为是A_VERY_PLATFORM_DEPENDENT,但是从今天的应用程序开发人员的角度来看,他要么陷入某些框架,要么被困在某个框架中,或者是daredevil编码器,正在研究原始技术作为COM,非常依赖,我会称之为VERY_CONTROLLED_ENVIRONMENT.
对于TL;DR:在现代操作系统上,我认为我不应该在退出时执行清理.如果你认为我错了,为什么?
PS:我不是在谈论RTOS,我的意思是受控环境意味着Windows,Linux和我从未意味着设备驱动程序开发或操作系统开发.