gpt4 book ai didi

C++ std::map 内存管理

转载 作者:行者123 更新时间:2023-11-30 02:47:10 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com