不删除静态指针谷歌风格 关于销毁的决定常见模式

问题描述

根据Google C++ Style Guide - Static and Global Variables

关于销毁的决定

...
因此,我们只允许具有静态存储持续时间的对象,如果它们是可轻微破坏的。

常见模式

...

  • 映射、集合和其他动态容器:...如果您确实更喜欢标准库中的动态容器,请考虑使用函数局部静态指针,如下所述。
  • 如果所有其他方法都失败了,您可以动态创建一个对象,并且永远不会使用函数本地静态指针或引用(例如,static const auto& impl = *new T(args...);删除它。

据我所知,动态分配的对象永远不会被释放。
当程序结束时,操作系统将释放所有未释放的对象,但这不是正确的方法
为什么删除动态分配的对象是一个可选选项?

解决方法

为什么不删除动态分配的对象是一个可选选项?

因此:

OS 将在程序结束时释放所有未释放的对象

简而言之,不释放内存是一个问题,因为这会导致内存泄漏形式的不必要的内存使用。对于不再运行的程序来说,不必要的内存使用无关紧要,因此在这种情况下不是问题。

请注意,如果您确实遵循这种风格,那么您可能会发现某些内存分析器将缺少释放报告为内存泄漏,这可能难以与无意的内存泄漏区分开来。

除了内存泄漏的(非)问题之外,为了解释为什么这可能是一个更可取的选择,这种风格避免了静态初始化顺序失败的一些问题,而不需要 Nifty Counter Idiom。作为额外的好处,它可能会使程序的关闭速度更快一些。