1
Discussion | Обсуждение / Re: Memory leak
« on: February 05, 2020, 10:55:55 am »
Супер! =)
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
bool ScriptEngineManager::addFunction(const QString& name,
QScriptEngine::FunctionSignature function,
const QString& category,
const QString& description)
void ScriptEngineModel::updateModel()
, в которой используется следующее выражение m_rootNode->clear();
. Но т.к. m_rootNode создается в модели, которая хранится в классе типа Singlton, то при удалении ReportEngine и PreviewReportWidget m_rootNode с дочерними узлами остается в памяти, до завершения приложения. Но также был замечен рост кол-ва ScriptEngineNode почти с каждым новым циклом, а это уже становится похожим на утечку, использовал тот же тест что и выше, и проверял подобным способом:static int countScriptEngineNode = 0;
ScriptEngineNode::ScriptEngineNode( const QString &name, const QString &description, NodeType type, ScriptEngineNode *parent, const QIcon &icon )
: m_name( name ), m_description( description ), m_icon( icon ), m_type( type ), m_parent( parent )
{
qDebug() << "create ScriptEngineNode " << this << ++countScriptEngineNode;
}
ScriptEngineNode::~ScriptEngineNode()
{
qDebug() << "delete ScriptEngineNode" << this << --countScriptEngineNode;
for ( int i = 0; i < m_childs.count(); ++i )
{
delete m_childs[i];
}
}
for ( int i = 0; i < 10; i ++ )
{
TestMemoryLeak();
}
void TestMemoryLeak()
{
QString path = "Путь до отчета";
LimeReport::ReportEngine *limereport = new LimeReport::ReportEngine();
limereport->loadFromFile( path );
auto prev = limereport->createPreviewWidget();
delete prev;
delete limereport;
}
TextItem::TextItem( QObject *owner, QGraphicsItem *parent )
{
listLeak.append( this );
qDebug() << "create " << dynamic_cast<QObject *>( this ) << listLeak.size();
}
TextItem::~TextItem()
{
listLeak.removeOne( this );
qDebug() << "delete" << dynamic_cast<QObject *>( this ) << listLeak.size();
}
for ( int i = 0; i < 100; i++ )
{
PreviewReportWidget *wdg = m_report->createPreviewWidget(); // где m_report = new LimeReport::ReportEngine()
delete wdg;
}
//foreach(PageItemDesignIntf* page, m_renderingPages){
// delete page;
//}
Приветствую! Если речь идет о crosstable то в limereport их покамест нет.