C++;映射内存管理 我有以下C++代码< /P> map<long, TelemInfoV01> LastTelemetry; void UpdateTelemetry( const TelemInfoV01 &info ) { LastTelemetry[info.mID] = info; } 地图遥测; void updateelemetry(const TelemInfoV01&info) { LastTelemetry[info.mID]=信息; }
其中TelemInfoV01是一个结构 updateElemetry方法在我的代码之外调用,传递一个值,我缓存该值并在以后使用。地图如何管理内存?是否以相同的方式复制结构,从全局LastTelemetry映射中删除后是否必须手动删除 我不控制进入方法的'info'变量的范围。我只想缓存它的值,以便在不同的调用中使用它 问这个问题的主要原因是我有一些内存泄漏,我想找到它 谢谢, 斯特沃 updateElemetry方法在我的代码之外调用,传递 值,我将其缓存并稍后使用。地图如何管理内存 map将保留自己的类实例副本,如果TelemInfoV01得到正确实现,那么您就不必担心内存泄漏。如果您在其中分配了一些内存,那么您必须遵循以防止内存泄漏,但最好将指针放在智能指针(所谓的指针)中 是否以相同的方式复制结构,是否必须手动删除 从全球最新遥测地图中删除后 您不必担心,从映射中删除结构后,将对其调用析构函数并正确销毁它。所以,对于这里的内存泄漏,您必须在结构构造函数中分配一些裸指针,然后忘记在析构函数中删除它C++;映射内存管理 我有以下C++代码< /P> map<long, TelemInfoV01> LastTelemetry; void UpdateTelemetry( const TelemInfoV01 &info ) { LastTelemetry[info.mID] = info; } 地图遥测; void updateelemetry(const TelemInfoV01&info) { LastTelemetry[info.mID]=信息; },c++,memory-management,map,memory-leaks,C++,Memory Management,Map,Memory Leaks,其中TelemInfoV01是一个结构 updateElemetry方法在我的代码之外调用,传递一个值,我缓存该值并在以后使用。地图如何管理内存?是否以相同的方式复制结构,从全局LastTelemetry映射中删除后是否必须手动删除 我不控制进入方法的'info'变量的范围。我只想缓存它的值,以便在不同的调用中使用它 问这个问题的主要原因是我有一些内存泄漏,我想找到它 谢谢, 斯特沃 updateElemetry方法在我的代码之外调用,传递 值,我将其缓存并稍后使用。地图如何管理内存 map将保
如果您的缓存是一个全局变量,那么一旦您从主缓存返回,它就会被销毁。因此,如果在主端之前检查内存泄漏,缓存可能看起来像内存泄漏。Q映射如何管理内存 映射不会对内存进行任何特殊管理 Q是否以某种方式复制结构 A是的
map
的运算符[]
功能定义如下:
mapped_type& operator[] (const key_type& k);
表达式LastTelemetry[info.mID]
的计算结果为TelemInfoV01&
。这意味着线
LastTelemetry[info.mID] = info;
类似于在TelemInfoV01
上调用赋值运算符(如a=b;
)。info
的副本存储在地图中
Q从全局LastTelemetry地图中删除后,我是否必须手动删除它
A否。由于地图包含对象,因此当地图被销毁时,对象将被销毁。如果选择存储指向
TelemInfoV01
的指针而不是对象,则必须格外小心才能释放内存。映射保留自己的键和值副本。你不必担心任何事情。使用valgrind
或vld
之类的工具来追踪内存泄漏。否则,使用原始指针的任何地方都是一个良好的起点。确保TelemInfoV01
在复制构造、复制分配和销毁时行为正常。