QMap 是否生成内存泄漏

Is QMap generating memory leaks?

本文关键字:内存 泄漏 是否 QMap      更新时间:2023-10-16

作为新手valgrind用户,我无法弄清楚它输出以下消息的原因

1 块中的 40 个字节肯定会丢失

有问题的代码行如下:

void KukaDevice::_init()
{
    m_ops.insert(KukaDeviceSpace::OFF , &KukaDevice::_doNothing);
    m_ops.insert(KukaDeviceSpace::INITIALIZING ,&KukaDevice::_doInitialization);
    m_ops.insert(KukaDeviceSpace::STARTING ,&KukaDevice::_doStarting);
    m_ops.insert(KukaDeviceSpace::MONITORING ,&KukaDevice::_doMonitoring);
    m_ops.insert(KukaDeviceSpace::WORKING ,&KukaDevice::_doWorking);
    m_ops.insert(KukaDeviceSpace::STOPPING ,&KukaDevice::_doStop);
    m_ops.insert(KukaDeviceSpace::SHUTTINGDOWN ,&KukaDevice::_doShutdown);
}

其中变量定义为:

#ifndef KukaDevice_H
#define KukaDevice_H
#include <QMap>
class KukaDevice : public QObject
{
    Q_OBJECT
/// High Level Operations
void _doNothing(); /// waits 10 ms
void _doInitialization();
void _doStarting(); 
void _doMonitoring();
void _doWorking();
void _doStop();
void _doShutdown();
/// Initialization
void _init(); 
typedef void (KukaDevice::*doFunc)();
typedef QMap<int,doFunc> OpStack;
OpStack m_ops;
};
#endif // KukaDevice_H

有什么提示吗?QMap 是否有可能产生泄漏?我是否以错误的方式使用 QMap?谢谢!

编辑:也许这是相关信息:仅当我终止应用程序时才会显示该消息。

Valgrind 的意思是,当您退出应用程序时,QMap 中仍有分配的内存。事实上,对于任何容器实现来说都是如此,在这些容器实现中,您添加了一堆从未清理过的引用。

如果对象是在应用程序的生存期内存在的长期对象,则它并不是真正的泄漏。但是,如果您销毁了 KukaDevice 类的对象,则需要确保已清除 QMap,因为存储的项目将存在于堆中。