我有一个类,在它的功能我用memset的分配内存一个,然后程序进入一个循环,但我的问题是,即使我已经在析构函数设置delete[]
,如果我通过单击X关闭该程序将在析构函数被调用和存储libreated?或其泄露?
class Example {
public:
int *a;
Example() {
a = new int[100];
memset(a, 0, sizeof(a)); //Allocating memory
}
~Example() {
delete[] a;
}
};
int main() {
Example(); //Memory allocated.
while (true) {
//Other code here, if i close the program now (Pressing X), will the memory be liberated?
}
return 0;
}
既然你提到的“X”我以为你在谈论一个Windows应用程序。 Linux是最有可能类似,但针对其他操作系统和ekbedded系统,您的里程可能会有所不同。
现在,有关Windows。简单的答案是 - 关闭您的应用程序会自动释放其所有内存。事实上,OS是一个很多更有效的了解比你的应用程序是,如果你知道你的应用程序被关闭,你可以跳过所有的析构函数和内存释放,等等你可以节省时间。操作系统将替你啦。这同样适用于一举关闭所有文件,网络套接字,内核处理,窗户等操作系统只是草率地扔掉一切都属于你的进程。
如果我通过单击X关闭该程序将在析构函数被调用和存储libreated?
不,内存不会被自动释放。有可能是把钩子钩住你的程序,让你做一些清理工作是termintaed程序之前的方式,但它不会默认到位。
或其泄漏【J
当程序被终止,大多数运行时系统确保程序使用的内存为其他程序提供。在这个意义上,内存不泄漏,但来自单个程序的角度来看,内存泄漏。
PS
请注意,我从一个主流台式机/笔记本电脑用户的角度来讲。嵌入式系统的行为可能完全不同。