Nic*_*ton 44 c++ heap memory-management dynamic
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++析构函数.
Bri*_*ndy 69
显式调用delete非常重要,因为您可能在析构函数中有一些要执行的代码.就像将一些数据写入日志文件一样.如果让操作系统为您释放内存,则不会执行析构函数中的代码.
大多数操作系统将在程序结束时释放内存.但是好的做法是自己解除分配,就像上面说的那样操作系统不会调用你的析构函数.
至于通常调用delete,是的,你总是想调用delete,否则你的程序会有内存泄漏,这将导致新的分配失败.
Fer*_*cio 24
是的,当您通过内存泄漏检测工具运行程序时,它有助于消除误报.
是.
想想你的班级A必须要毁灭.
如果你不叫delete上a,那析构函数将不会被调用.通常,如果过程结束,那将无关紧要.但是如果析构函数必须释放数据库中的对象呢?将缓存刷新到日志文件?将内存缓存写回磁盘?
你知道,删除对象不仅仅是"好习惯",在某些情况下它是必需的.
| 归档时间: |
|
| 查看次数: |
17197 次 |
| 最近记录: |