[英]are pointers released from memory when c++ program end?
这是一个初学者的问题,但是我学习了使用c#进行编程的知识,现在我正在使用c ++,并且现在我正在使用指针,我知道在完成对它们的处理之后,当程序关闭时,我必须将其从内存中释放出来。他们从内存中移走还是留在那里?
程序结束时,它使用的所有内存(无论是否动态分配)都返回给操作系统。 不管是C程序,C ++程序,C#程序还是您可能正在编写的任何其他类型的程序,都没有关系。
现在,仅因为操作系统将回收内存,并不意味着您可以更轻松地进行内存管理。 在程序运行时,您应尝试释放完成的所有内存。 否则会导致“内存泄漏”,并且这些泄漏肯定会影响您的程序及其所运行的系统,至少在您的程序运行时。
请注意,不是需要释放的指针,而是指向的对象。
答案取决于指针指向的内存类型:
new
或new []
或malloc
或calloc
动态分配的对象,则需要通过resp调用delete
或delete []
或free
显式释放它们。 请注意,建议您谨慎使用动态分配;如果必须,则使用智能指针而不是原始指针。
编辑:
如果您的问题是:
如果您的程序没有取消分配内存并退出该怎么办?
答案是:
操作系统对其进行了回收。 操作系统只是收回分配给进程的所有内存,而该进程不了解程序是否泄漏了内存。
但是,自己清理自己的混乱始终是一个好习惯。
如果您的类的析构函数确实具有带副作用的代码,则不对动态分配的指针调用delete
导致未定义行为,这会使您的代码完全陷入编译器的摆布之下。
您分配的内存(例如,使用New关键字)将保留在那里,除非您将其删除! 如果您在谈论指针本身,那么可以! 在程序结束时,指针将被清除!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.