gpt4 book ai didi

c++ - Qt3D中的内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:52 24 4
gpt4 key购买 nike

在我的项目中,我做了一个类,如下所示,

class MyQt3D: public Qt3DExtras::Qt3DWindow
{
public:
MyQt3D()
{

// Root entity
m_rootEntity = new Qt3DCore::QEntity();
setRootEntity(m_rootEntity);

// Camera
Qt3DRender::QCamera* cameraEntity = camera();


cameraEntity->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
cameraEntity->setPosition(QVector3D(0, 0, 40.0f));
cameraEntity->setUpVector(QVector3D(0, 1, 0));
cameraEntity->setViewCenter(QVector3D(0, 0, 0));

// For camera controls
Qt3DExtras::QOrbitCameraController *camController = new Qt3DExtras::QOrbitCameraController(m_rootEntity);
camController->setCamera(cameraEntity);

auto m_coneEntity = new Qt3DCore::QEntity(m_rootEntity);

// Cone shape data
Qt3DExtras::QConeMesh *cone = new Qt3DExtras::QConeMesh(m_coneEntity);
cone->setTopRadius(0.5);
cone->setBottomRadius(1);
cone->setLength(3);
cone->setRings(50);
cone->setSlices(20);

// ConeMesh Transform
Qt3DCore::QTransform *coneTransform = new Qt3DCore::QTransform(m_coneEntity);
coneTransform->setScale(1.5f);
coneTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1.0f, 0.0f, 0.0f), 45.0f));
coneTransform->setTranslation(QVector3D(0.0f, 4.0f, -1.5));

Qt3DExtras::QPhongMaterial *coneMaterial = new Qt3DExtras::QPhongMaterial(m_coneEntity);
coneMaterial->setDiffuse(QColor(QRgb(0x928327)));

// Cone
m_coneEntity->addComponent(cone);
m_coneEntity->addComponent(coneMaterial);
m_coneEntity->addComponent(coneTransform);




}

~MyQt3D()
{
delete m_rootEntity;
}

protected:
Qt3DCore::QEntity *m_rootEntity;
};

因为我需要动态创建和销毁类“MyQt3D”的对象,所以我使用以下 for 循环来显示内存泄漏,

for(int i=0;i<20;i++)
{
MyQt3D* pView = new MyQt3D();
delete pView;
}

一开始,内存使用量是20MB。 for 循环后,内存使用量为 80 MB。

源代码项目文件可以在以下位置找到, https://drive.google.com/drive/folders/1r8ZPaJVBOlYKywm7K-Se0J0ylQjbJILY?usp=sharing

如何解决内存泄漏问题?谢谢。

最佳答案

谢谢大家。在您的帮助下,内存泄漏问题得以解决。

我使用 Qt3D 中的示例代码“BasicShape”做了一个小实验,它将显示一个窗口,如下所示, The running window of the project

我对项目做了一点修改。也就是我添加如下代码,

for(int i=0;i<1000;i++)
{
Qt3DCore::QEntity *TempRootEntity = new Qt3DCore::QEntity();
SceneModifier *modifier = new SceneModifier(TempRootEntity);
delete modifier;
delete TempRootEntity;
qDebug()<<"delet!!!"<<i<< "\n";
}

之前

SceneModifier *modifier = new SceneModifier(rootEntity);

然后,运行这个程序。你会发现现在有内存泄漏,尽管我们已经执行了 1000 次 for 循环。重点是

delete TempRootEntity;

因为 SceneModifier 中的所有实体都是 TempRootEntity 的子实体。 只有delete修饰符是不够的!

关于c++ - Qt3D中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51655692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com