C++ std::map 内存管理

标签 c++ memory-management dictionary memory-leaks

我有以下 C++ 代码

map<long, TelemInfoV01> LastTelemetry;

void UpdateTelemetry( const TelemInfoV01 &info )
{
    LastTelemetry[info.mID] = info;
}

其中 TelemInfoV01 是一个结构

UpdateTelemetry 方法在我的代码之外调用,传递一个值,我缓存并稍后使用。 map 如何管理内存?它是否以相同的方式复制结构,从全局 LastTelemetry map 中删除后是否必须手动删除它?

我不控制进入方法的“信息”变量的范围。我只想缓存它的值(value),以便在不同的调用中使用它。

询问的主要原因是我有一些内存泄漏,想追踪它。

谢谢, 斯蒂沃

最佳答案

The UpdateTelemetry method is called outside of my code, passing a value, that I cache and use later. How does the map manage memory?

map 将保留自己的类实例拷贝,如果正确实现了 TelemInfoV01,则您不必担心内存泄漏。如果你在其中分配一些内存,那么你必须遵循 rule of three以防止内存泄漏,但将指针放在智能指针(所谓的 rule of zero )中仍然更好。

Is it copying the struct in same way, do I have to delete it manually after removing from the global LastTelemetry map?

你不用担心,在你的结构从 map 中移除后,析构函数将被调用并被正确销毁。因此,对于此处的内存泄漏,您必须在结构构造函数中分配一些裸指针,然后忘记在析构函数中删除它。

如果你的缓存是一个全局变量,那么一旦你从你的 main 返回它就会被销毁。因此,如果您在主端之前检查内存泄漏,您的缓存可能看起来像内存泄漏。

关于C++ std::map 内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22923236/

相关文章:

android - 在 Apache Cordova for Android 中访问 C++ 代码

c++ - 使用 va_list 和 printf 传递参数时的精度损失

python - 从列表类别创建递归列表

C++ If 语句或文本文件

c++ - 使用浮点坐标绘制poly()

汇编内存分配

c# - 将 int 作为文本流式传输到文件中,而不创建字符串对象

ios - 如何实现发布方法?

javascript - 尝试使用 React.js 中的 map 访问特定 JSON 数据时出现问题

python - 如何在 python 中动态组合集合