以下是代码:
class x
{
int k;
};
int main()
{
x *p=new x[1000000];
return 0;// can be 1 too
}
现在的问题是当我们退出主函数时,分配的内存是由编译器调用析构函数释放的,还是由操作系统释放的,因为进程将不再存在。?
以下是代码:
class x
{
int k;
};
int main()
{
x *p=new x[1000000];
return 0;// can be 1 too
}
现在的问题是当我们退出主函数时,分配的内存是由编译器调用析构函数释放的,还是由操作系统释放的,因为进程将不再存在。?
不会调用析构函数,但任何体面的操作系统都会回收已失效进程的所有资源。然而,该标准对实施没有这样的要求。
除非您也告诉它,否则 C++ 不会释放任何内存。我不太熟悉退出在 C++ 中的工作方式,但我很确定是操作系统在这里释放了所有内存。如果您调用 exit() 函数,C++ 可能会为您清理工作。
内存未被释放(由编译器):不会调用析构函数。每个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)
作为开发人员,您确实应该为此承担责任。最好使用智能指针。除此之外,一旦程序终止,操作系统应该为您整理。c++ 语言本身不会回收您分配的内存。