当c++程序结束时,指针会从内存中释放吗
are pointers released from memory when c++ program end?
这是一个初学者的问题,但我用c#学习了编程,现在我正在学习c++,现在我在处理指针,我知道当我处理完它们时,我必须将它们从内存中释放出来,但当程序关闭时,它们是从内存中删除还是留在那里?
当程序结束时,它使用的所有内存(无论是否动态分配)都会返回到操作系统。不管它是C程序、C++程序、C#程序还是你可能正在编写的任何其他类型的程序。
现在,操作系统将回收内存并不意味着你可以对内存管理漠不关心。当你的程序运行时,你应该设法释放你用完的内存。不这样做会导致"内存泄漏",这些肯定会影响你的程序及其运行的系统,至少在你的程序运行时是这样。
请注意,需要解除分配的不是指针,而是指向的对象。
答案取决于指针指向的内存类型:
- 如果指针指向自动对象,则对象将被隐式清理
- 如果指针指向使用
new
或new []
、malloc
或calloc
动态分配的对象,则需要通过重新调用delete
、delete []
或free
来显式释放这些对象
请注意,建议谨慎使用动态分配,如果必须,请使用智能指针而不是原始指针。
编辑:
如果您的问题是:
如果程序没有释放内存并退出,会发生什么
答案是:
操作系统回收它。操作系统只是收回它分配给一个进程的所有内存,它不知道你的程序是否泄露了内存
但自己收拾残局总是一个好办法
如果你有一个类的析构函数确实有副作用的代码,那么不在动态分配的指针上调用delete
会导致Undefined Behavior,这会使你的代码完全取决于编译器。
您分配的内存(例如使用New关键字)将保留在那里,除非您删除它!如果你谈论的是指针本身,那么是的!在程序结束时,指针将被擦除!
相关文章:
- 包含矢量指针的结构的内存释放问题
- Valgrind 声称内存释放中的自由空间太多
- 当 C 和 C++ 中严格要求内存释放时
- C++ 中指针变量的内存释放
- 德克内存释放
- 临时对象 c++ 的内存释放
- C 全局对象变量内存释放
- C++矢量动态内存释放/删除
- 从 cv::Mat 初始化的 IplImage 的内存释放
- SWIG类型映射中的内存释放
- STL容器中的内存释放
- QWebView内存释放
- 内存释放 C++
- 大返回值(如字符串)的内存释放如何在C++中发生
- 重新分配之前的内存释放
- Linux C++ 中的内存释放
- VS2012编译器奇怪的内存释放问题
- 调试断言失败!错误的内存释放
- 负责 COM 互操作中的内存释放
- imread命令后OpenCV矩阵内存释放