我在删除QSA的引用对象时遇到了一些问题。在构造函数中,我写道:
QSProject * project = {initialization of QSProject}
MyWrapper * wrapper = new MyWrapper; // MyWrapper is QObject's child. It comes without parent here
project->addObject(wrapper);
我在descructor中写道:
project->clearObjects();
delete project;
delete wrapper;
此代码导致析构函数执行时出现段错误 - 当我尝试删除包装器时。
我做了一些研究,我知道:
怎么了?
答案 0 :(得分:0)
首先,我不熟悉QSA,但考虑到Qt API通常如何工作,QSProject很可能拥有该对象的所有权。这意味着QSProject正在使用QObject::setParent()重新对象。
在这种情况下,您将双重删除该对象。
您是否使用诸如valgrind之类的工具验证了当您省略删除时实际上是在泄漏内存?