c++ - 实例化冲突 - 内存泄漏?

标签 c++ qt memory memory-leaks

这些问题我潜伏了一段时间,学到了很多,但最近遇到了一个我不明白的问题。我正在使用 Qt,需要在各种类方法中创建/替换 QMovie 对象(最终在 QLabel 中设置)。我已经使用 new 关键字定义了对象。因此在标题中我有

QMovie * movie;

为简单起见,我将等效代码放在一个方法中。这相当于两行代码

QMovie * movie = new QMovie(QByteArray1,this);
QMovie * movie = new QMovie(QByteArray2,this);

这有效(我不知道为什么)但是因为它是一个重复的操作我担心内存泄漏。似乎第二个定义成功地替换了第一个定义,但由于大概它们每个都有不同的指针,我不知道如何删除指向第一个定义的指针。我在类析构函数中删除了电影,但不知道它是否会删除所有内容。有人知道这里发生了什么吗?

附言我这样做是因为使用 QByteArray(从网上下载)中的数据创建 QMovie 对象的唯一方法(我在 Qt 中找到)是使用 QMovie 构造函数。如果我只是想用文件中的新数据替换当前的电影数据,我可以使用方法

movie->setFileName(fileName);

但这在使用二进制数据时不是一个选项。注意:QMovie 还有一个构造函数,它以文件名而不是 QByteArray 作为参数。使用文件名也可以使用上面的代码,并且更容易测试。

我们将不胜感激。

最佳答案

一般来说,如果从 QObject 派生的任何东西包含在 QObject 的层次结构中,它们会在父级被销毁时自动销毁。在您的情况下,您通过构造函数为 QMovie 提供父级,因此应该为您处理清理工作。如果你想确认,从 QMovie 派生一个类,实现一个打印消息的析构函数,并确保它在你期望的时候被调用(即当父级被破坏时)。

关于c++ - 实例化冲突 - 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11007029/

相关文章:

javascript - 在 QML 中访问 QList 对象

c# - 如何将字符串参数从 C++ com 传递给 C#?

python - 优化大量数据的搜索和插入操作

node.js - 如何查看loopback内存db中的数据?

c++ - 发送一系列命令并等待响应

Java获取可用内存

c++ - 如何找到除数以最大化余数?

c++ - getline 行尾?

c++ - 如何使用 Qt 在队列中创建多个线程?

qt - QML:如何拒绝放置操作