c++ - 这会导致内存泄漏吗

标签 c++

我有一个代码,它本质上是一个数据累加器,当我在我的服务器上运行它时,它使用了几乎 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/

相关文章:

c++ - 如何优雅地编写使用模板参数隐含值的类模板?

c++ - 不支持 512 字节长度的顶点着色器

c++ - 我如何散列密码并将其存储以供以后使用另一个摘要进行验证?

c++ - 确定Firebird SQL版本的方法?

c++ - 在 C++ 中存储当前对象

c++ - CS107 作业文件

c++ - 如何将 'fixed' floatfield 用于 istream/istringstream?

c++ - 为什么 std::nothrow 在 gcc(4.9) 中不能按预期工作?

c++ - 为什么我在 QTableView 中看不到放置指示器?

c++ - Visual Studio 调试器不工作