如果该程序被手动关闭被称为析构函数?

问题描述 投票:0回答:2

我有一个类,在它的功能我用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;
}
c++ windows memory destructor
2个回答
1
投票

既然你提到的“X”我以为你在谈论一个Windows应用程序。 Linux是最有可能类似,但针对其他操作系统和ekbedded系统,您的里程可能会有所不同。

现在,有关Windows。简单的答案是 - 关闭您的应用程序会自动释放其所有内存。事实上,OS是一个很多更有效的了解比你的应用程序是,如果你知道你的应用程序被关闭,你可以跳过所有的析构函数和内存释放,等等你可以节省时间。操作系统将替你啦。这同样适用于一举关闭所有文件,网络套接字,内核处理,窗户等操作系统只是草率地扔掉一切都属于你的进程。


0
投票

如果我通过单击X关闭该程序将在析构函数被调用和存储libreated?

不,内存不会被自动释放。有可能是把钩子钩住你的程序,让你做一些清理工作是termintaed程序之前的方式,但它不会默认到位。

或其泄漏【J

当程序被终止,大多数运行时系统确保程序使用的内存为其他程序提供。在这个意义上,内存不泄漏,但来自单个程序的角度来看,内存泄漏。

PS

请注意,我从一个主流台式机/笔记本电脑用户的角度来讲。嵌入式系统的行为可能完全不同。

© www.soinside.com 2019 - 2024. All rights reserved.