如果手动关闭程序,是否会调用析构函数?

时间:2019-02-10 21:47:00

标签: c++ windows memory destructor

我有一个类,在其中一个函数中,我使用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;
}

2 个答案:

答案 0 :(得分:1)

由于您提到“ X”,因此我假设您正在谈论Windows应用程序。 Linux很可能与Linux类似,但对于其他操作系统和嵌入式系统,您的工作量可能会有所不同。

现在,关于Windows。简短的答案是-关闭应用程序会自动释放其所有内存。实际上,该操作系统的效率要比您的应用程序高得多,因此,如果您知道自己的应用程序正在关闭,则可以跳过所有析构函数和释放内存等。这样可以节省时间。无论如何,操作系统将为您做到这一点。关闭任何文件,网络套接字,内核句柄,窗口等的操作也一样。操作系统只是一口气将所有属于您进程的东西都丢弃了。

答案 1 :(得分:0)

  

如果我通过单击X关闭程序,将调用析构函数并释放内存吗?

否,该内存不会自动释放。可能有一些方法可以在程序中放置钩子,以便在程序终止之前进行一些清理,但默认情况下它不会就位。

  

还是泄漏?j

程序终止时,大多数运行时系统都会确保该程序使用的内存可供其他程序使用。从这个意义上说,内存不是在泄漏,而是从单个程序的角度来看,内存在泄漏。

PS

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