我有以下 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/