我有一个类,在它的一个函数中我使用 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;
}
最佳答案
既然您提到了“X”,我假设您是在谈论 Windows 应用程序。 Linux 很可能类似,但对于其他操作系统和嵌入式系统,您的情况可能会有所不同。
现在,关于 Windows。简短的回答是——关闭你的应用程序会自动释放它所有的内存。事实上,操作系统在这方面比您的应用程序更有效率,所以如果您知道您的应用程序正在关闭,您可以跳过所有析构函数和内存释放等。您将节省时间。无论如何,操作系统都会为你做这件事。这同样适用于关闭任何文件、网络套接字、内核句柄、窗口等。操作系统只是立即丢弃属于您的进程的所有内容。
关于c++ - 如果手动关闭程序,是否会调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54621411/