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

标签 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;
}

最佳答案

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

现在,关于 Windows。简短的回答是——关闭你的应用程序会自动释放它所有的内存。事实上,操作系统在这方面比您的应用程序更有效率,所以如果您知道您的应用程序正在关闭,您可以跳过所有析构函数和内存释放等。您将节省时间。无论如何,操作系统都会为你做这件事。这同样适用于关闭任何文件、网络套接字、内核句柄、窗口等。操作系统只是立即丢弃属于您的进程的所有内容。

关于c++ - 如果手动关闭程序,是否会调用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54621411/

相关文章:

windows - exe数据段中的数据

java - 获取操作系统级别的系统信息

c++ - 通过复制到函数将指针传递给动态分配的数组会产生意外结果

c++ - 动态分配内存,拷贝构造函数出错

c++ - 将对象作为参数传递,而不是传递对象的变量

c++ - 在 QLabel/QGraphicsView 中显示 Dicom 图像

c++ - C/C++ 复合 TCP

c++ - 按特定值按升序对字符串进行排序。我的实现有什么问题?

windows - rtsp 到 youtube 流在 Windows 中不起作用

windows - 构建和使用 Google Protocol Buffers