0

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

销毁决定

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

常见模式

...

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

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

4

1 回答 1

1

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

因为这:

程序结束时,操作系统将释放所有未释放的对象

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

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

除了内存泄漏的(非)问题之外,为了解释为什么这可能是一个更可取的选择,这种风格避免了静态初始化顺序惨败的一些问题,而不需要漂亮的计数器成语。作为额外的奖励,它可能会使程序的关闭速度更快一些。

于 2021-02-16T10:39:50.813 回答