【发布时间】:2013-10-14 18:25:52
【问题描述】:
为什么我们必须在c++中使用析构函数来释放内存,
我们可以使用
delete or delete[]
一个程序用完的内存不是都在程序终止的时候释放的吗?
【问题讨论】:
-
如果我让你的对象在一个循环中运行,只要程序运行(比如创建绘图对象来刷新我的窗口)?操作系统不需要清理,但很有可能会清理。
-
没有。当程序终止时,程序正在使用的堆栈上的内存被释放,但是当且仅当使用
delete它时,程序在堆上保留的内存才会被释放。如果你不delete它,你有内存泄漏。 -
这取决于操作系统,即使大多数操作系统在退出时会释放程序分配的所有内存,但您必须意识到您的程序不是单独运行的,计算机中还有其他人并且资源(内存)是共享的,因此请尝试优化;)
-
你对析构函数和释放内存有点困惑,它们是两个不同的东西。正常使用时
delete会调用析构函数和释放内存,但是你可以不调用析构函数就释放内存,也可以不使用delete调用析构函数。 -
@nhgrif:不,完全不正确,假设你有一个在任何方面都能胜任的操作系统。
标签: c++ memory raii memory-management