程序结束后,内存泄漏是否有任何影响?

时间:2014-07-16 19:14:55

标签: c++ memory memory-leaks

我的问题是关于堆上分配的内存的绝对范围。假设您有一个简单的程序,如

class Simple
{
private:
  int *nums;
public:
  Simple()
  {
    nums = new int[100];
  }
  ~Simple()
  {
    delete [] nums;
  }
};

int main()
{
  Simple foo;
  Simple *bar = new Simple;
}

显然foo main的范围超出范围,并且调用了析构函数,而bar除非调用delete,否则不会调用其析构函数。因此Simple指向的bar对象以及nums数组将在堆中丢失。虽然这显然是不好的做法,但实际上它是否真的重要,因为程序会立即结束?我是否理解操作系统将释放它在分配给该程序后所有堆内存?我的错误决定的影响是否仅限于它的运行时间?

1 个答案:

答案 0 :(得分:3)

任何现代操作系统都会在终止后回收任何进程分配的所有内存 现在,每个进程在所有常见操作系统中都有自己的虚拟地址空间,因此操作系统很容易将所有内存都归还。
毋庸置疑,依靠操作系统是不好的做法 它本质上意味着这样的代码不能用于运行很长时间的程序中。 此外,在现实世界的应用程序中,析构函数可能远不仅仅是释放内存 网络客户端可以发送终止消息,数据库相关对象可以提交事务,文件包装对象可以将一些闭包数据写入其文件。
换句话说:不要让你的记忆泄漏。