当c ++程序结束时,是从内存中释放的指针吗?

时间:2012-10-13 17:30:20

标签: c++ memory pointers

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

3 个答案:

答案 0 :(得分:15)

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

现在,仅仅因为操作系统将回收内存并不意味着你可以对内存管理更加傲慢。当你的程序运行时,你应该尝试释放你已经完成的任何内存。不这样做会导致“内存泄漏”,这些肯定会影响你的程序及其运行的系统,至少在程序运行时是这样。

答案 1 :(得分:2)

请注意,它不是指针需要重新分配而是指向对象。

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

  • 如果指针指向自动对象,则隐式清除对象。
  • 如果指针指向使用newnew []malloccalloc动态分配的对象,则需要通过resp调用{{1}显式取消分配它们}或deletedelete []

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

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

答案是:
操作系统回收它。操作系统只是收回它分配给一个进程的所有内存,它不知道你的程序是否泄漏了内存 但是,自己清理自己的烂摊子总是一种很好的做法 如果你有一个类的析构函数确实有副作用的代码,那么不在动态分配的指针上调用free会导致未定义的行为,它会使你的代码在编译器中完全悬空。

答案 2 :(得分:-1)

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