Ich benutze Qt und cpp für meinen Code, in dem ich eine Klasse erstellt habe, die viele Daten enthält (sagen wir ~ 100MB im RAM). Im Destruktor dieser Klasse lösche ich diese Daten mit einer while-Schleife. Das Problem ist, dass wenn ich das Löschen dieser Klasse anrufe, der Haupt-Thread einfriert, da er damit beschäftigt ist, diese Daten zu löschen. Jemand sagte mir, dass Smart Pointer die Lösung ist, da es automatisch den Speicher freigibt und ich nicht explizit löschen muss, aber ich bezweifle, dass Smart Pointer auch nur den Speicher im Haupt-Thread freigibt. Ich möchte wissen, dass die Löschung von Smartpointern im Haupt-Thread erfolgt oder nicht?Cpp-Code Haupt-Thread-Einfrieren wegen des Löschens von Objekten kann mit Smart-Zeigern gelöst werden oder nicht?
Codebeispiel ist: Example.h
#ifndef EXAMPLE_H
#define EXAMPLE_H
#include <iostream>
#include <qlist.h>
#include <memory>
#include <qdebug.h>
#include <QColor>
class Temp
{
private:
\t QList<QColor *> *m_colorList;
public:
\t Temp();
\t void addList();
\t ~Temp();
};
#endif
Example.cpp
Temp::Temp()
{
\t std::cout<<"Temp Constructor"<<std::endl;
\t m_colorList = new QList<QColor *>;
}
Temp::~Temp()
{
\t for(int i=0;i<m_colorList->size();i++)
\t \t delete m_colorList->at(i);
\t delete m_colorList;
}
void Temp::addList()
{
\t QColor *color;
\t for(int i =0; i<=2000000; i++)
\t {
\t \t color = new QColor(10,20,50,255);
\t \t m_colorList->append(color);
\t }
}
int main(int argc,char *argv)
{
\t Temp *tempObj = new Temp();
\t qDebug()<<"Adding list";
\t tempObj->addList();
\t qDebug()<<"List added";
\t for(int i=0;i<10;i++)
\t \t qDebug()<<i;
\t qDebug()<<"deleting list";
\t delete tempObj;
\t tempObj=NULL;
\t qDebug()<<"Memory deleted";
\t getchar();
}
Fügen Sie Ihr Codebeispiel hinzu, bitte –
Etwas hängt von Ihrem Smartpointer ab - bei einem shared_ptr wird das Löschen vom Thread ausgeführt, der den letzten Verweis auf das Objekt entfernt hat ... – UKMonkey