以下是代码:
class x
{
int k;
};
int main()
{
x *p=new x[1000000];
return 0;// can be 1 too
}
现在的问题是,当我们从main函数中出来时,分配的内存被编译器调用析构函数释放,或者它被操作系统释放,因为进程将不再存在。?
答案 0 :(得分:3)
不会调用任何析构函数,但任何体面的操作系统都将回收已失效进程的所有资源。但是,该标准对实现没有这样的要求。
答案 1 :(得分:1)
除非你说出来,否则C ++不会释放任何内存。我不太熟悉C ++中现有的工作方式,但我很确定这是在这里释放所有内存的操作系统。如果调用exit()函数,C ++可能会为您清理。
答案 2 :(得分:0)
作为开发人员,您应该对此采取应对措施。更好的是使用智能指针。除此之外,一旦程序终止,操作系统应该为你整理。 c ++语言本身无法回收你分配的内存。
答案 3 :(得分:0)
内存未被释放(由编译器):不会调用析构函数。每个new
(或new []
)必须有相应的delete
(或delete []
):C ++让您管理记忆,你必须要处理这个问题!顺便说一句,当程序完成运行时,操作系统会回收资源(因此系统会释放使用的内存)。
A* a = new A;
delete a;
由编译器解释为
// assuming new throws std::bad_alloc upon failure
A* a = ::operator new(sizeof(A));
a->A::A();
if ( a != 0 ) { // a check is necessary for delete
a->~A(); // DESTRUCTOR IS CALLED BY THE DELETE OPERATOR
::operator delete(a);
}
(资料来源:http://www.codeproject.com/Articles/4795/C-Standard-Allocator-An-Introduction-and-Implement)