【发布时间】:2021-05-19 02:42:30
【问题描述】:
根据Google C++ Style Guide - Static and Global Variables,
销毁决定
...
因此,我们只允许具有静态存储持续时间的对象,前提是它们可以简单地破坏。常见模式
...
- 映射、集合和其他动态容器:...如果您确实更喜欢标准库中的动态容器,请考虑使用函数局部静态指针,如下所述。
- 如果所有其他方法都失败了,您可以使用函数局部静态指针或引用(例如,
static const auto& impl = *new T(args...);)动态创建一个对象,并且永远不要删除它。
据我所知,动态分配的对象永远不会被释放。
当程序结束时,操作系统会释放所有未释放的对象,但这不是正确的方法。
为什么不删除动态分配的对象是一个可选择的选项?
【问题讨论】:
-
为什么 Google 的“C++ 风格指南”工作可能适用于他们的代码库,这是一种糟糕的通用编码风格。
-
如果有一个你在整个程序中使用的静态对象,并且该对象不管理内存以外的任何资源,你可能永远不会清除它,因为操作系统会进行清理追随你。这会弄乱检测内存泄漏的工具,所以我不会亲自去做。
-
似乎保留一个裸静态指针变量并动态创建/删除相应的对象将是一个符合要求的解决方案。所以这里没问题。
-
@AyxanHaqverdili "操作系统会在你之后进行清理" 操作系统只会释放资源,但不会调用析构函数。如果你需要析构函数的功能,你根本不能遵循这样的风格指南。示例:如果您有一个表示持久性的对象,并且将在销毁时将其状态写入文件,则此样式指南根本行不通。我个人不知道本指南有什么帮助。