是否可以使用智能指针解决因删除对象导致的 Cpp 代码主线程冻结?

Cpp code main thread freezing because of deleting object can be resolved using smart pointers or not?

我在我的代码中使用 Qt 和 cpp,我在其中创建了一个 class 保存大量数据(假设 RAM 中有 ~100MB)。在此 class 的析构函数中,我使用 while 循环删除此数据。问题是,当我调用此 class 的删除时,主线程冻结,因为它正忙于删除此数据。 有人告诉我智能指针是解决方案,因为它会自动释放内存,我不必显式调用 delete 但我怀疑智能指针也只会在主线程中释放内存。 我想知道智能指针删除是否在主线程中完成?

代码示例是: Example.h

#ifndef EXAMPLE_H
#define EXAMPLE_H

#include <iostream>
#include <qlist.h>
#include <memory>
#include <qdebug.h>
#include <QColor>

class Temp
{
private:
 QList<QColor *> *m_colorList;
public:
 Temp();
 void addList();
 ~Temp();
};

#endif

Example.cpp

Temp::Temp()
{
 std::cout<<"Temp Constructor"<<std::endl;
 m_colorList = new QList<QColor *>;
}

Temp::~Temp()
{
 for(int i=0;i<m_colorList->size();i++)
  delete m_colorList->at(i);
 delete m_colorList;
}

void Temp::addList()
{
 QColor *color;
 for(int i =0; i<=2000000; i++)
 {
  color = new QColor(10,20,50,255);
  m_colorList->append(color);
 }
}

int main(int argc,char *argv)
{
 Temp *tempObj = new Temp();
 qDebug()<<"Adding list";
 tempObj->addList();
 qDebug()<<"List added";
 for(int i=0;i<10;i++)
  qDebug()<<i;
 qDebug()<<"deleting list";
 delete tempObj;
 tempObj=NULL;
 qDebug()<<"Memory deleted";
 getchar();
}

智能指针会为您删除对象automatically.That的全部。在幕后,智能指针将为您调用 delete - 并且无论如何都会执行析构函数。

除非您将其设置为在不同的线程中执行,否则 运行 任何内容都不会在不同的线程中执行。虽然您可以在线程中执行此删除操作,但您将负责确保主线程中没有任何内容在删除对象时访问该对象 - 显然,如果您尝试在对象被删除时(或之后)访问该对象的一部分,那么您可能会使您的程序崩溃。