【发布时间】:2019-06-09 15:45:54
【问题描述】:
我的 C++ 知识不太好,所以请多多关照 :)。
我的问题是关于编码方式的一般性问题。即使我下面的示例侧重于 QGraphicsScene,QTableItem 对象或任何使用指针的对象也是如此。
我正在尝试在循环中创建指针,但我面临一个明显的困难。 每次通过循环时,我都会在内存中创建一个新空间而不释放它,从而导致内存泄漏。我不知道编写这种代码的最佳实践是什么。 我在下面给你一段代码作为例子,也许你可以帮助我改进,以便我能够理解。
void MainWindows::function(){
for(int i=0;i<10;i++){
QGraphicsScene *sceneP = new QGraphicsScene();
QPixmap pixmapP(QString::fromStdString("/home/xyz/"+std::to_string(i)+".png"));
sceneP->addPixmap(pixmapP);
ui->graph->setScene(sceneP);
ui->graph->show();
}
}
这个例子非常简单,但我想要在我的应用程序中对位于 /home/xyz/1.png、/home/xyz/2.png ...等的图片进行收费。 显然,这些图片是在sceneP中加载的,然后在第二次迭代时,它们会丢失在内存中。 我的问题如下: 你知道一个简单的方法来编写这个函数而不丢失任何内存吗? 非常感谢
【问题讨论】:
-
qt 确实为您管理对象(在某些情况下,也不太了解 qt)。这更多是关于 qt 内存管理而不是 c++
-
您没有在 QGraphicsScene() 上设置父级。例如
QGraphicsScene *sceneP = new QGraphicsScene(this); -
设置父级后可以做 auto children = findChildren
();获取所有现有 QGraphicsScene对象的列表。 -
你说得对,谢谢我做了我的问题的版本
-
添加
()并没有太大变化。无论如何,请不要根据您得到的答案/cmets 更改您的问题。问题应该有你的代码损坏,修复应该进入答案
标签: c++ qt for-loop pointers memory