【发布时间】:2014-09-07 10:59:49
【问题描述】:
我的问题是关于堆上分配的内存的绝对范围。假设您有一个简单的程序,例如
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。因此bar 指向的Simple 对象以及nums 数组将在堆中丢失。虽然这显然是不好的做法,但由于程序立即结束,这真的很重要吗?我的理解是否正确,操作系统将在它结束后释放它分配给该程序的所有堆内存?我的错误决定的影响是否仅限于它的运行时间?
【问题讨论】:
-
在 C++ 中,类声明以分号结尾。到目前为止,您的程序甚至无法编译。
-
here你应该找到答案
-
杜尔。你是对的。固定。
-
这不是一个好习惯,但操作系统总是会在您清理并释放您拥有的任何已分配内存(实际上,操作系统只关心虚拟内存映射 - 它不知道也不关心如何
malloc()已实现,它只处理对mmap(2)/munmap(2)或等效于映射/取消映射虚拟内存地址的调用。 -
好的。那正是我所想。我只是需要确认一下。谢谢。
标签: c++ memory memory-leaks