【发布时间】:2019-07-04 09:46:44
【问题描述】:
我有一个类,在它的一个函数中我使用 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”是什么意思?
-
@eerorika Windows 应用程序中的右上角按钮,用于关闭程序。即铬,即Windows 资源管理器等
-
这将取决于实现、应用程序和操作系统。
-
Example();创建一个未使用的 R 值。因此,在您进入循环之前,会在行尾立即调用析构函数。你的意思是auto v=Example();或Example v;之类的吗? -
这个问题的文字强调内存泄漏,而标题没有提到这一点。您对哪个方面更感兴趣——如果调用了析构函数,或者程序终止后内存是否泄漏? (后者比前者有一个更简单、独立于语言的答案。)
标签: c++ windows memory destructor