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

Are destructors called if the program is closed manually?

我有一个class,在它的一个函数中我使用memset分配内存,然后程序进入一个循环,但我的问题是,即使我在析构函数,如果我通过单击 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;
}

if i close the program by clicking the X will the destructor be called and the memory libreated?

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

Or its leaking?j

当程序终止时,大多数 运行 时间系统确保该程序使用的内存可供其他程序使用。从这个意义上说,内存并没有泄漏,但从单个程序的角度来看,内存正在泄漏。

PS

请注意,我是从主流 desktop/laptop 用户的角度出发。嵌入式系统的行为可能完全不同。

既然您提到了 "the X",我假设您是在谈论 Windows 应用程序。 Linux 很可能相似,但对于其他操作系统和 ekbedded 系统,您的情况可能会有所不同。

现在,大约 Windows。简短的回答是——关闭你的应用程序会自动释放它所有的内存。事实上,OS 比你的应用程序更有效,所以如果你知道你的应用程序正在关闭,你可以跳过所有的析构函数和内存释放等。你会节省时间。 OS 无论如何都会为您完成。关闭任何文件、网络套接字、内核句柄、windows 等也是如此。OS 只是一口气扔掉属于您的进程的所有内容。