c++ - 在不释放所有动态分配的资源的情况下结束程序是否有风险?

标签 c++ heap-memory dynamic-allocation

我知道堆栈分配的资源以相反的顺序释放,因为它们是作为 RAII 的一部分在函数末尾分配的。我一直在做一个项目,我从我正在使用的库中用"new"分配了很多内存,并且正在测试一些东西。我没有添加关闭函数作为执行所有动态分配的初始化函数的对应项。当您关闭程序时,我很确定没有内存泄漏,因为分配的内存应该由操作系统回收。至少任何现代操作系统,正如这个与我的问题类似的问题所解释的:dynamically allocated memory after program termination .

我想知道两件事:

1:在这种情况下,资源的释放有特定的顺序吗?它与您编写的代码有什么关系(即,您分配它的顺序),还是完全取决于操作系统来做它的事情?

2: 我没有做一个关闭函数来反转初始化的原因是因为我对自己说我现在只是在测试东西,我稍后再做。做我正在做的事情是否有对任何东西造成任何损害的风险?我能想象到的最糟糕的情况是我链接的那个问题的答案中提到的,那就是操作系统无法回收内存,即使在程序退出后你也会发生内存泄漏。

我已经按照 Bullet 物理库教程初始化了一堆代码,如下所示:

pSolver = new btSequentialImpulseConstraintSolver;
pOverlappingPairCache = new btDbvtBroadphase();
pCollisionConfig = new btDefaultCollisionConfiguration();
pDispatcher = new btCollisionDispatcher(pCollisionConfig);
pDynamicsWorld = new btDiscreteDynamicsWorld(pDispatcher, pOverlappingPairCache, pSolver, pCollisionConfig);

现在永远不要对其中的任何一个调用 delete,因为正如我所说,我只是在测试。

最佳答案

这取决于资源。打开的文件将被关闭。内存将被释放。不会调用析构函数。创建的临时文件不会被删除。

程序退出后不存在内存泄漏的风险。

关于c++ - 在不释放所有动态分配的资源的情况下结束程序是否有风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51807586/

相关文章:

c++ - 全局模板对象 C++

c - 了解堆中的内存分配

java - 无法使用 Eclipse 内存分析器打开 HPROF 文件

c++ - 在 C++ 中动态加载的库分配的基类指针上调用 delete 的安全性

更改函数内的矩阵并在 main 中使用它

c++ - 一种使用不同风格的私有(private)成员的方法

c++ - 如何在不使用 C++ 中的宽字符串的情况下创建目录?

c++ - 内部编译器错误消息是什么意思,我该怎么办?

java - Java 对象的内存分配过程中的步骤

c++ - 无序映射 : clear() does not release heap on clear()