我有一个代码,它本质上是一个数据累加器,当我在我的服务器上运行它时,它使用了几乎 100% 的内存,更像是 93%,但我怀疑有什么东西阻止我达到 100%。这很糟糕,我一直在积极尝试弄清楚我是否有潜在的内存泄漏。这是我的一个想法,也许有人可以告诉我这是否是原因。这是正在发生的事情的简化版本。
在我的代码中,我有两个类 A 和 B。类 B 包含一些信息,类 A 累积 B 类并包含管理功能。 A 的成员之一是 Bs 的 vector 。
我放入B的信息来自一个程序。该程序为我提供了对包含太多信息的类 C 的引用,而我只需要其中的一部分,因此我创建了 B。
一旦 Bs 的 vector 足够大,我将信息保存到文件中,清除 vector 并继续累积 Bs。
当您立即取消引用新分配的内存时会发生什么?情况如下所示:
std::vector<B> Baccumulator;
Baccumulator.push_back( *(new B(C)) );
让我们假设我们在保存和清除之前仅针对任意数字推回 1 000 000 次。根据我的普通知识,我用“new”请求内存,通过给它正确的参数构造我的类 B,然后推回 B 在 vector 中创建新创建的 B 的拷贝。
我如何释放我用"new"请求的内存,因为拷贝已放入 vector 中?
最佳答案
是的,它会泄漏,但好消息是您不必那样做。你可以简单地说
Baccumulator.push_back(B(C));
或
Baccumulator.emplace_back(C);
关于c++ - 这会导致内存泄漏吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54136817/