我有一个类,在其中一个函数中,我使用memset分配内存,然后程序进入循环,但是我的问题是,即使我在析构函数中设置了delete[]
,如果我关闭了通过单击X程序是否将调用析构函数并释放内存?还是泄漏?
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;
}
答案 0 :(得分:1)
由于您提到“ X”,因此我假设您正在谈论Windows应用程序。 Linux很可能与Linux类似,但对于其他操作系统和嵌入式系统,您的工作量可能会有所不同。
现在,关于Windows。简短的答案是-关闭应用程序会自动释放其所有内存。实际上,该操作系统的效率要比您的应用程序高得多,因此,如果您知道自己的应用程序正在关闭,则可以跳过所有析构函数和释放内存等。这样可以节省时间。无论如何,操作系统将为您做到这一点。关闭任何文件,网络套接字,内核句柄,窗口等的操作也一样。操作系统只是一口气将所有属于您进程的东西都丢弃了。
答案 1 :(得分:0)
如果我通过单击X关闭程序,将调用析构函数并释放内存吗?
否,该内存不会自动释放。可能有一些方法可以在程序中放置钩子,以便在程序终止之前进行一些清理,但默认情况下它不会就位。
还是泄漏?j
程序终止时,大多数运行时系统都会确保该程序使用的内存可供其他程序使用。从这个意义上说,内存不是在泄漏,而是从单个程序的角度来看,内存在泄漏。
PS
请注意,我是从主流台式机/笔记本电脑用户的角度讲的。嵌入式系统的行为可能完全不同。