8

这是一个初学者问题,但我学习了 c# 编程,现在我正在转向 c++,现在我正在使用指针,我知道当我完成它们但程序关闭时,我必须从内存中释放它们他们是从记忆中删除还是留在那里?

4

3 回答 3

23

当您的程序结束时,它使用的所有内存(无论是否动态分配)都将返回给操作系统。它是 C 程序、C++ 程序、C# 程序还是您可能正在编写的任何其他类型的程序都没有关系。

Now, just because the OS will reclaim the memory doesn't mean you can be cavalier about memory management. While your program runs, you should try to take care of freeing any memory you're done with. Not doing so will cause "memory leaks", and those can certainly affect your program and the system it's running on, at least while your program is running.

于 2012-10-13T17:37:25.793 回答
2

请注意,它不是需要释放的指针,而是指向的对象。

答案取决于指针指向的内存类型:

  • 如果指针指向自动对象,则隐式清除对象。
  • 如果指针指向使用newornew []mallocor动态分配的对象calloc,则需要通过分别调用deleteor delete []or来显式释放它们free

请注意,建议谨慎使用动态分配,如果必须,请使用智能指针而不是原始指针。

编辑:
如果您的问题是:
如果您的程序没有释放内存并退出会发生什么?

答案是:
操作系统回收它。操作系统只是收回分配给它不知道您的程序是否泄漏内存的进程的所有内存。
但是,自己清理自己的烂摊子始终是一个好习惯。
如果你有一个类的析构函数确实有带有副作用的代码,那么不调用delete动态分配的指针会导致未定义的行为,它会使你的代码完全悬在编译器的摆布之下。

于 2012-10-13T17:35:24.207 回答
-2

您分配的内存(例如使用 New 关键字)将保留在那里,除非您将其删除!如果您在谈论指针本身,那么是的!在您的程序结束时,指针将被清除!

于 2012-10-13T17:33:37.703 回答