In the following C++ code, a QML component is created using a QQmlIncubator
. The Qt documentation has this snippet from here http://doc.qt.io/qt-5/qqmlincubator.html:
QQmlIncubator incubator;
component->create(incubator);
while (!incubator.isReady()) {
QCoreApplication::processEvents(QEventLoop::AllEvents, 50);
}
// Who owns 'object'? When is it deleted?
QObject *object = incubator.object();
It's my understanding that this snippet isn't totally complete, because you'd need to call delete
on component. According to http://doc.qt.io/qt-5/qqmlcomponent.html#create, the QQmlComponent::create()
function transfers ownership of the returned object instance to the caller. Good so far.
Now comes my question--who owns object
in the snippet above? In my case, I've place the above snippet in a member function of a class, so the QQmlIncubator incubator
goes out of scope, and I only hold on to component
and object
, which are both instance variables of their containing class, and I call delete component
in the destructor. Am I cleaning up properly?
So does object
belong to component
? When does object
get destroyed?
Update 1
See my follow-up question: Safely deleting QML component being used in StackView transition.