这是一段安全注销C++类型的代码示例片段:
#include "TestDLL.hxx"
#include "Test.hxx"
#include "Sinagle.hxx"
#include "TestSingle.hxx"
#include <QDebug>
#include <QQuickView>
#include <QCoreApplication>
#include <QDateTime>
#include <QThread>
#include <private/qqmlmetatype_p.h>
#include <private/qqmltype_p_p.h>
#include <private/qqmlpropertycache_p.h>
#include <private/qqmlengine_p.h>
#include <private/qqmlengine_p.h>
#include <QQmlEngine>
QList<int> ids;
static QQmlEngine *m_engine = nullptr;
static TestSingle *ts;
void init(QQmlEngine *engine)
{
m_engine = engine;
ids << qmlRegisterType<Test>("com.plugins.TestDLL", 1, 0, "Test");
ids << qmlRegisterAnonymousType<Sinagle>("com.plugins.TestDLL", 1);
ts = new TestSingle;
ids << qmlRegisterSingletonInstance("com.plugins.TestDLL",1,0,"CxxTS", ts);
}
void deinit()
{
for (const auto &x : qAsConst(ids)) {
QQmlType type = QQmlMetaType::qmlType(x, QQmlMetaType::TypeIdCategory::QmlType);
if (type.singletonInstanceInfo()) {
delete type.priv()->extraData.sd->singletonInstanceInfo;
type.priv()->extraData.sd->singletonInstanceInfo = nullptr;
}
QQmlEnginePrivate::get(m_engine)->cache(type, -1)->invalidate(type.metaObject());
QQmlMetaType::unregisterType(x);
}
delete ts;
m_engine->collectGarbage();
m_engine->trimComponentCache();
}