C++ 程序终止前是否需要释放内存资源?

C++ 程序终止前是否需要释放内存资源?,c++,software-design,C++,Software Design,在主进程完成执行之前释放程序资源似乎是相当标准的做法。但在我学习OpenGL/Vulkan的过程中,我发现教程中似乎没有必要的一点是专门用于资源清理的代码量。在你的程序退出之前清理你自己的资源有什么实际的好处吗?当一个进程完成时,现代操作系统不是已经这样做了吗 这不是GL/Vulkan的问题,它更一般,适用于开发人员管理自己内存的任何语言。编写好代码的一部分是编写可用于其他目的的代码,并形成有用工具的集合。如果您的代码在完成后没有自行清理,那么将其用作其他内容的一部分就困难得多。如果代码本身没有

在主进程完成执行之前释放程序资源似乎是相当标准的做法。但在我学习OpenGL/Vulkan的过程中,我发现教程中似乎没有必要的一点是专门用于资源清理的代码量。在你的程序退出之前清理你自己的资源有什么实际的好处吗?当一个进程完成时,现代操作系统不是已经这样做了吗


这不是GL/Vulkan的问题,它更一般,适用于开发人员管理自己内存的任何语言。

编写好代码的一部分是编写可用于其他目的的代码,并形成有用工具的集合。如果您的代码在完成后没有自行清理,那么将其用作其他内容的一部分就困难得多。如果代码本身没有清理干净,那么在代码中发现内存泄漏也会困难得多


当然,如果您的项目是一次性的,并且学习如何干净地关闭它没有特定的教育目的,那么这一点可能可以忽略。

编写好代码的一部分是编写可用于其他目的的代码,这些代码形成了一组有用的工具。如果您的代码在完成后没有自行清理,那么将其用作其他内容的一部分就困难得多。如果代码本身没有清理干净,那么在代码中发现内存泄漏也会困难得多


当然,如果您的项目是一次性的,并且学习如何干净地关闭它没有特定的教育目的,那么这可能可以省略。

取决于资源、清理的含义、您实际正在做的事情以及其他事情。以下几点值得考虑:

我在干什么?假设您编写了一个模块化代码。然后你想要所有的析构函数。毕竟,有人可能希望在不同的上下文中使用您的代码,在这种上下文中,一旦您处理完代码,进程就不会关闭

大多数现代操作系统确实会自动回收资源和清理内存,但是否保证每个操作系统都会这样做?。但是如果你真的在做一些人际关系呢?如果您想向您的服务器发送再见消息以收集统计数据,该怎么办?也许你需要清理。而且从一开始就编写它比以后添加它更容易

独立于操作系统的代码您真的想编写依赖于操作系统的代码吗?操作系统总是回收任何资源,这真的是一个标准吗

bug,bug,bug操作系统确实有bug。还有很多。当然,您是否有责任以防弹的方式编写代码是有争议的。还是值得考虑的


取决于资源、清理意味着什么、您实际在做什么以及其他事情。以下几点值得考虑:

我在干什么?假设您编写了一个模块化代码。然后你想要所有的析构函数。毕竟,有人可能希望在不同的上下文中使用您的代码,在这种上下文中,一旦您处理完代码,进程就不会关闭

大多数现代操作系统确实会自动回收资源和清理内存,但是否保证每个操作系统都会这样做?。但是如果你真的在做一些人际关系呢?如果您想向您的服务器发送再见消息以收集统计数据,该怎么办?也许你需要清理。而且从一开始就编写它比以后添加它更容易

独立于操作系统的代码您真的想编写依赖于操作系统的代码吗?操作系统总是回收任何资源,这真的是一个标准吗

bug,bug,bug操作系统确实有bug。还有很多。当然,您是否有责任以防弹的方式编写代码是有争议的。还是值得考虑的


请注意,教程通常会忽略错误检查和资源清理等样板代码,因此不要盲目地遵循它们的示例。想象一个文本编辑器应用程序。在用户写入的每个字符上,都会在堆上分配一些临时使用的内容。用户在离开RAM之前可以写多少个字符?他需要关闭应用程序才能释放内存。有点烦人:我建议编写清理资源的代码。如果您希望加快退出应用程序的速度,只需调用exit0即可绕过所有析构函数。有很多游戏都能做到这一点,但更多的游戏不能做到。请注意,教程通常会忽略错误检查和资源清理等样板代码,因此不要盲目跟随他们的例子。想象一下一个文本编辑器应用程序。在用户写入的每个字符上,都会在堆上分配一些临时使用的内容。用户在离开RAM之前可以写多少个字符?他需要关闭应用程序才能释放内存。有点烦人:我建议编写清理res的代码
资源。如果您希望加快退出应用程序的速度,只需调用exit0即可绕过所有析构函数。有很多游戏可以做到这一点,但更多的游戏没有做到。这种体验已经形成+先生,我喜欢阅读你的回答/评论。这种经历已经形成+先生,我喜欢阅读您的答案/评论。